Вопрос

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

set @myVar = true;

Какой-то триггер, содержащий этот код:

if (@myVar is not true) then
  execute something

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

Это было полезно?

Решение

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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top