Эквивалентная переменная сеанса MySQL для Oracle
-
22-08-2019 - |
Вопрос
В 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.
Не связан с StackOverflow