FirebirdSQL logo
 VIEWPROCEDURE 

Выполнение триггеров на событие базы данных и обработка исключений

Триггеры на события CONNECT и DISCONNECT выполняются в специально созданной для этого транзакции.Если при обработке триггера не было вызвано исключение, то транзакция подтверждается.Не перехваченные исключения откатят транзакцию и:

  • в случае триггера на событие CONNECT соединение разрывается, а исключения возвращается клиенту;

  • для триггера на событие DISCONNECT соединение разрывается, как это и предусмотрено, но исключения не возвращается клиенту.

Триггеры на события CONNECT и DISCONNECT срабатывают также при выполнении оператора сброса сессионного окружения.Особенности обработки ошибок в триггерах на события CONNECT и DISCONNECT смотри в секции ALTER SESSION RESET.

Триггеры на события транзакций срабатывают при старте транзакции, её подтверждении или откате.Не перехваченные исключения обрабатываются в зависимости от типа события:

  • для события TRANSACTION START исключение возвращается клиенту, а транзакция отменяется;

  • для события TRANSACTION COMMIT исключение возвращается клиенту, действия, выполненные триггером, и транзакция отменяются;

  • для события TRANSACTION ROLLBACK исключение не возвращается клиенту, а транзакция, как и предусмотрено, отменяется.

Ловушки

Из вышеизложенного следует, что нет прямого способа узнать, какой триггер (DISCONNECT или ROLLBACK) вызвал исключение.Также ясно, что вы не сможете подключиться к базе данных в случае исключения в триггере на событие CONNECT, а также отменяется старт транзакции при исключении в триггере на событие TRANSACTION START.В обоих случаях база данных эффективно блокируется до тех пор, пока вы не отключите триггеры базы данных и не исправите ошибочный код.

Отключение триггеров

В некоторые утилиты командной строки Firebird были добавлены новые ключи для отключения триггеров на базу данных:

gbak -nodbtriggers
isql -nodbtriggers
nbackup -T

Эти ключи могут использоваться только SYSDBA или владельцем базы данных.