Выполнение триггеров на событие базы данных и обработка исключений
Триггеры на события CONNECT
и DISCONNECT
выполняются в специально созданной для этого транзакции.Если при обработке триггера не было вызвано исключение, то транзакция подтверждается.Не перехваченные исключения откатят транзакцию и:
-
в случае триггера на событие
CONNECT
соединение разрывается, а исключения возвращается клиенту; -
для триггера на событие
DISCONNECT
соединение разрывается, как это и предусмотрено, но исключения не возвращается клиенту.
Триггеры на события CONNECT
и DISCONNECT
срабатывают также при выполнении оператора сброса сессионного окружения.Особенности обработки ошибок в триггерах на события CONNECT
и DISCONNECT
смотри в секции ALTER SESSION RESET.
Триггеры на события транзакций срабатывают при старте транзакции, её подтверждении или откате.Не перехваченные исключения обрабатываются в зависимости от типа события:
-
для события
TRANSACTION START
исключение возвращается клиенту, а транзакция отменяется; -
для события
TRANSACTION COMMIT
исключение возвращается клиенту, действия, выполненные триггером, и транзакция отменяются; -
для события
TRANSACTION ROLLBACK
исключение не возвращается клиенту, а транзакция, как и предусмотрено, отменяется.
Ловушки
Из вышеизложенного следует, что нет прямого способа узнать, какой триггер (DISCONNECT
или ROLLBACK
) вызвал исключение.Также ясно, что вы не сможете подключиться к базе данных в случае исключения в триггере на событие CONNECT
, а также отменяется старт транзакции при исключении в триггере на событие TRANSACTION START
.В обоих случаях база данных эффективно блокируется до тех пор, пока вы не отключите триггеры базы данных и не исправите ошибочный код.