Можно ли отключить триггер 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

Должен признаться, что у меня нет практического опыта в изданиях.