Можно ли отключить триггер Oracle для текущего сеанса?
Я хотел бы отключить определенный триггер для таблицы перед вставкой данных в него, но , не затрагивая других пользователей, которые могут изменять данные в этой же таблице. Я не могу найти документального способа сделать это. Это Oracle 11g.
Лучшим решением, которое я смог придумать, является создание переменной сеанса и установка моего приложения на некоторое значение, которое триггер проверяет перед выполнением своей работы.
Обязательный комментарий триггера: я ненавижу триггеры.
Ответы
Ответ 1
Добавить переменную в существующую спецификацию пакета (или создать новый пакет):
enable_trigger boolean := true;
Окружать код в триггере с помощью:
if enable_trigger then
end if;
Если вы хотите "отключить" триггер, установите для переменной значение false.
Лучшей практикой было бы поместить переменную в тело и написать процедуру набора и функцию get.
Ответ 2
Я не думаю, что отключить триггер можно для определенного сеанса в oracle или других rdbms.
Мое решение состоит в том, что если вы знаете CURRENT_USER или session_id, с которого вы входите в систему, чем вы можете поместить условие в триггер.
IF SYS_CONTEXT ('USERENV', 'CURRENT_USER') <> '<XYZ>' THEN
--do the operation
END IF;
Это условие, которое вы должны ввести в свой триггер
Ответ 3
Возможно, Oracle Editions полезны для этой цели? Создайте другой триггер в другом издании и измените сеанс на использование этой версии.
http://www.oracle-base.com/articles/11g/edition-based-redefinition-11gr2.php#editions
Должен признаться, что у меня нет практического опыта в изданиях.