Триггер – это специальная процедура языка PL/SQL. Обычная процедура начинает выполняться после ее вызова специальной командой, триггер же начинает выполняться, когда происходит определенное событие с таблицей. Событиями, которые вызывают выполнение триггера, являются операции вставки, удаления или обновления, выполняемые командами INSERT, DELETE или UPDATE. Триггеры выполняются либо до, либо после выполнения этих команд. Различают два варианта триггеров: триггеры, которые выполняются при обращении команды к строке таблицы, триггеры, которые выполняются до (или после) выполнения всей команды.
Использование триггера: аудита (отслеживания) модификаций данных; прозрачной журнализации (регистрации) событий; реализации комплексных организационных правил; автоматического вычисления значений столбцов; осуществления сложных процедур защиты; поддержки дублированных таблиц; сбор статистики по обращениям к таблице предотвращения незаконных транзакций;
Опция FOR EACH ROW или же триггер строки.
Присутствие или отсутствие опции FOR EACH ROW определяет, является ли этот триггер триггером предложения или триггером строки. Если эта опция включена, она казывает, что тело триггера возбуждается отдельно для каждой строки таблицы, затрагиваемой предложением триггера. Отсутвией этой опции указывает, что данный триггер должен возбуждаться лишь один раз для предложения триггера.
Внутри тела триггера строк, код PL/SQL и предложения SQL имеют доступ как к старым, так и к новым значениям столбоцов текущей строки, затрагиваемой предложением триггера. Для каждого столбца модифицируемой таблицы определены два КОРРЕЛЯЦИОННЫХ ИМЕНИ: одно для старого (old), другое - для ногово значения (new). В зависимости от типа предложения триггера, то или иное корреляционное имя может быть лишено смысла.
- Триггер, возбуждаемый предложением INSERT, имеет осмысленной доступ лишь к новым значения столбцов.
- Триггер, возбуждаемый предложением UPDATE, имеет доступ как к старым, так и к новым значениям столбцов для обоих возможных типов триггера (BEFORE или AFTER).
- Триггер, возбуждаемый предложением DELETE, имеет доступ лишь к старым значениям столбцов.
REFERENCING изменение название псевдозаписей:
REFERENCING OLD AS OLDR NEW AS NEWR