在MySQL中,我可以使用单个@创建访问会话变量。 实施例初始化:用于Oracle的MySQL等效会话变量
if (@myVar is not true) then
execute something
什么是Oracle 10g中的等效:
set @myVar = true;
包含此代码某些触发?
在MySQL中,我可以使用单个@创建访问会话变量。 实施例初始化:用于Oracle的MySQL等效会话变量
if (@myVar is not true) then
execute something
什么是Oracle 10g中的等效:
set @myVar = true;
包含此代码某些触发?
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
包全局变量可能会做同样的技巧。
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上使用软件包的一个优点是您可以获得一些封装。
为什么不只是使用绑定变量?在SQL加:
variable SOME_NUMBER number
exec :SOME_NUMBER := 10
PL/SQL过程已成功完成
if :SOME_NUMBER = 10 then
do something;
end if;
/
适用于任何类型的数据类型的Oracle的。
该变量需要在其他位置的触发器中从PL \ SQL外部访问。 – Joshua 2009-02-11 21:27:06
行为就像Java中的Thread本地对吧? – JamesC 2010-09-20 10:45:11