2009-02-09 4 views
3

MySQL에서는 @를 사용하여 세션 변수에 액세스 할 수 있습니다. 예 초기화 :Oracle 용 MySQL 동등 세션 변수

if (@myVar is not true) then 
    execute something 

오라클 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에서 스레드 로컬처럼 동작합니까? – JamesC

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; 
/

작품을 완성했다.

+0

변수는 다른 곳의 트리거에서 PL \ SQL 외부에서 액세스 할 수 있어야합니다. – Joshua