FirebirdSQL logo

Варианты триггеров

Существует шесть основных вариантов соотношения событие-фаза для таблицы (представления):

до добавления новой строки

(BEFORE INSERT)

после добавления новой строки

(AFTER INSERT)

до изменения строки

(BEFORE UPDATE)

после изменения строки

(AFTER UPDATE)

до удаления строки

(BEFORE DELETE)

после удаления строки

(AFTER DELETE)

Помимо базовых форм с единственной фазой и событием Firebird поддерживает также формы с одной фазой и множеством событий, например BEFORE INSERT OR UPDATE OR DELETE или AFTER UPDATE OR DELETE или любая другая комбинация на ваш выбор.

Note

Триггеры с несколькими фазами, такие как BEFORE OR AFTER …​ не поддерживаются.

Контекстные переменные INSERTING, UPDATING и DELETING логического типа могут быть использованы в теле триггера для определения события, которое вызвало срабатывание триггера.

Контекстные переменные 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 доступны только для чтения.