用于Oracle的MySQL等效会话变量

时间:2009-02-09 19:34:24

标签: mysql oracle plsql session-variables

在MySQL中,我可以使用单个@创建一个访问会话变量。 示例初始化:

set @myVar = true;

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

if (@myVar is not true) then
  execute something

Oracle 10g中的等价物是什么?

3 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:2)

包全局变量可能会做同样的伎俩。

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_CONTEXT上使用软件包的一个优点是可以获得一些封装。

答案 2 :(得分:0)

为什么不直接使用绑定变量?在SQL Plus中:

variable SOME_NUMBER number
exec :SOME_NUMBER := 10
  

PL / SQL程序已成功完成

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

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