代码之家  ›  专栏  ›  技术社区  ›  Joshua

Oracle的MySQL等效会话变量

  •  3
  • Joshua  · 技术社区  · 17 年前

    初始化示例:

    set @myVar = true;
    

    包含此代码的某些触发器:

    if (@myVar is not true) then
      execute something
    

    3 回复  |  直到 17 年前
        1
  •  6
  •   Quassnoi    17 年前
    SQL> EXEC DBMS_SESSION.SET_CONTEXT('CLIENTCONTEXT', 'myvar', 'myvalue');
    
    PL/SQL procedure successfully completed
    
    SQL> SELECT SYS_CONTEXT('CLIENTCONTEXT', 'myvar') FROM dual;
    
    SYS_CONTEXT('CLIENTCONTEXT','M
    --------------------------------------------------------------------------------
    myvalue
    
        2
  •  2
  •   WW.    17 年前

    包全局变量可能也会执行相同的操作。

    CREATE OR REPLACE PACKAGE foo as
      myVar BOOLEAN;
    END foo;
    
    
    CREATE OR REPLACE PACKAGE BODY foo AS
      BEGIN
        MyVar := true;
    END foo;
    
    
    BEGIN
      If foo.myVar THEN 
        dbms_output.put_line ('MyVar is True');
      end if;
    END;
    

    与SYS_上下文相比,使用包的一个优点是可以得到一些封装。

        3
  •  0
  •   ropable    17 年前

    variable SOME_NUMBER number
    exec :SOME_NUMBER := 10
    

    if :SOME_NUMBER = 10 then
       do something;
    end if;
    /
    

    适用于任何类型的Oracle数据类型。