Эквивалентная переменная сеанса MySQL для Oracle - PullRequest
3 голосов
/ 09 февраля 2009

В MySQL я могу создать доступ к переменной сеанса, используя один @. Пример инициализации:

set @myVar = true;

Некоторые триггеры, содержащие этот код:

if (@myVar is not true) then
  execute something

Что такое эквивалент в Oracle 10g?

Ответы [ 3 ]

6 голосов
/ 09 февраля 2009
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 голосов
/ 09 февраля 2009

Глобальная переменная пакета, вероятно, сделает то же самое.

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 голосов
/ 11 февраля 2009

Почему бы просто не использовать переменные связывания? В SQL Plus:

variable SOME_NUMBER number
exec :SOME_NUMBER := 10

Процедура PL / SQL успешно завершена

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

Работает для любого типа данных Oracle.

...