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