FirebirdSQL logo

Контекстные переменные NEW и OLD

В DML триггерах Firebird обеспечивает доступ к множеству контекстных переменных NEW и OLD.Каждое множество является массивом всей строки: OLD.* — значение строки до изменения данных и NEW.* — требуемое ("новое") значение строки.Операторы могут ссылаться на них использую следующие формы NEW.columname и OLD.columnname.columnname может быть любым столбцом определённым в таблице(представлении), а не только тем что был изменён.

Контекстные переменные NEW и OLD подчиняются следующим правилам:

  • Во всех триггерах контекстные переменные OLD доступны только для чтения;

  • В триггерах BEFORE UPDATE и BEFORE INSERT переменные NEW доступны для чтения и записи, за исключением COMPUTED BY столбцов;

  • В INSERT триггерах ссылка на переменные OLD не допускается и вызовет исключение;

  • В DELETE триггерах ссылка на переменные NEW не допускается и вызовет исключение;

  • Во всех AFTER триггерах переменные NEW доступны только для чтения.

Триггеры на события базы данных

Триггер, связанный с событиями базы данных, может вызываться при следующих событиях:

После соединения с базой данных, или сбросасессионного окружения

ON CONNECT

Перед выполнением триггера автоматическизапускается транзакция по умолчанию

До отсоединения от базы данных или сбросомсессионного окружения

ON DISCONNECT

Перед выполнением триггера автоматическизапускается транзакция по умолчанию

После старта транзакции

ON TRANSACTION START

Триггер выполняется в контексте текущейтранзакции

Перед подтверждением транзакции

ON TRANSACTION COMMIT

Триггер выполняется в контексте текущейтранзакции

Перед отменой транзакции

ON TRANSACTION ROLLBACK

Триггер выполняется в контексте текущейтранзакции

Контекстная переменная RESETTING может использоваться в триггерах на события ON CONNECT и ON DISCONNECT для того, чтобы отличить сброс сеанса от подключения/отключения от базы данных.