2009-02-09 61 views
3

在MySQL中,我可以使用单个@创建访问会话变量。 实施例初始化:用于Oracle的MySQL等效会话变量

if (@myVar is not true) then 
    execute something 

什么是Oracle 10g中的等效:

set @myVar = true; 

包含此代码某些触发?

回答

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 
+0

行为就像Java中的Thread本地对吧? – JamesC 2010-09-20 10:45:11

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

0

为什么不只是使用绑定变量?在SQL加:

variable SOME_NUMBER number 
exec :SOME_NUMBER := 10 

PL/SQL过程已成功完成

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

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

+0

该变量需要在其他位置的触发器中从PL \ SQL外部访问。 – Joshua 2009-02-11 21:27:06