NO CASCADE BEFORE / AFTER - определяет время активизации триггера. NO CASCADE указывает, что если действие триггера включает в себя модификацию других таблиц, для которых в свою очередь определены триггеры, то эти вторичные триггеры не выполняются. (В текущей версии эта опция избыточна, так как в BEFORE-триггере не допускаются операторы модификации).
INSERT/ DELETE / UPDATE - условие активизации,
для UPDATE триггер может запускаться при обновлении только заданных столбцов.
ON определяет имя базовой таблицы (не представления!), для которой создается триггер.
REFERENCING - определяет коррелированные имена, по которым действие триггера может обращаться к столбцам
14
изменяемых строк (промежуточным переменным) и к изменяемой таблице:
OLD - имя, представляющее изменяемую строку до изменения ( по умолчанию - old);
NEW - имя, представляющее изменяемую строку до изменения ( по умолчанию - new);
OLD_TABLE - имя, представляющее изменяемую таблицу до изменения;
NEW_TABLE - имя, представляющее изменяемую таблицу до изменения.
Существует довольно большое число правил, регламентирующих применение коррелированных имен (см.
DB2 SQL Reference)
FOR EACH ROW / STATEMENT - область действия триггера.
MODE DB2SQL - обязательный параметр, не имеющий вариаций в текущих версиях.
WHEN - определяет условие, при котором выполняются последующие операторы. Условие здесь - такое же условие, какое употребляется во фразе WHERE запроса.
Действия триггера могут включать в себя следующие SQL-операторы:
для BEFORE-триггера: SELECT, SET, SIGNAL;
для AFTER-
триггера: SELECT, SET, SIGNAL, INSERT, DELETE, UP DATE.
Если в действиях триггера выполняются несколько операторов, то они берутся в операторные скобки BEGIN ATOMIC ... END и разделяются символом "точка с запятой".
Оператор SET применяется только в триггерах и устанавливает значения промежуточных переменных:
15
Выражение в операторе SET подчиняется правилам, описанным для скалярного выражения в синтаксисе запроса. Выражение не может содержать агрегатных функций, кроме тех случаев, когда они употребляются в скалярном подзапросе. В нем могут употребляться промежуточные переменные NEW и OLD.
Обратите внимание на то, что в составе выражения присваивания можно применять CASE-выражения - это создает возможность выполнять присваивание по некоторой логике.
Оператор SIGNAL применяется только в триггерах и вызывает аварийное завершение триггера и оператора, его вызвавшего:
Строковая константа 1 содержит значение, устанавливаемое в SQLSTATE. Ее размер должен быть 5 символов, в ней допускаются только цифры и большие латинские буквы. Обычно значения, формируемые программистом, начинаются с символа '7'.
Триггеры: Oracle
Триггер создается оператором языка SQL CREATE TRIGGER:
16
Отличия триггера Oracle от триггера DB2 (многие из них видны из самого синтаксиса оператора) состоят в следующем:
Оператор CREATE позволяет заменить триггер (в DB2 для этого нужно уничтожить триггер и создать его заново).
Триггер можно создавать и для представления (это связано прежде всего с более широкими возможностями изменения представлений в Oracle).
Введено новое условие активизации INSTEAD OF (триггер выполняется вместо оператора); оно применяется только для представлений и позволяет изменять базовые таблицы вместо неизменяемого представления.
Для триггера могут быть назначены несколько условий активизации (через операцию OR). В этом случае действие триггера может "узнать" по какому условию запущен триггер, проверяя значения предикатов INSERTING, DELETEING, UPDATING.
В условии фразы WHEN не допускаются запросы.
17
Собственно выполняемые действия триггера задаются в виде блока на языке PL/SQL.
Триггер, выполняемый после (AFTER) выполнения оператора, модифицирующего некоторую таблицу, не может содержать операторы выборки (SELECT) из этой таблицы.
Триггеры: MSSQL
Триггер создается оператором языка SQL CREATE TRIGGER (приведен его минимальный синтаксис):
CREATE TRIGGER имя_триггера
ON { таблица | вид }
{
{{ FOR | AFTER | INSTEAD OF } { [DELETE] [,] [INSERT]
[,][UPDATE] }
AS
[ { IF UPDATE ( столбец )
[ { AND | OR } UPDATE ( столбец ) ] [ ...n ]
]
оператор_SQL [ ...n ]
}
}
К особенностям триггера MSSQL относится: Триггер можно создавать и для представления.
Условие активизации BEFORE представлено условием активизации FOR.
Введено новое условие активизации INSTEAD OF (триггер выполняется вместо оператора).
Для триггера могут быть назначены несколько условий активизации через запятую (INSERT, DELETE,
UPDAT).
Проверить, подвергалось ли изменению значение конкретного столбца, можно с помощью предиката
UPDATE (столбец).
18