КаталогОглавлениеИндекс раздела


Справка. Триггеры

Триггеры - средство, обеспечивающее автоматическое выполнение некоторых действий при каждой модификации таблицы.

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

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

При обеспечении в общем-то одинаковой функциональности, синтаксис и некоторые детали применения триггеров различаются в DB2 и Oracle, поэтому мы рассматриваем их раздельно.

Триггеры: DB2

Триггер создается оператором языка SQL CREATE TRIGGER:

NO CASCADE BEFORE / AFTER - определяет время активизации триггера. NO CASCADE указывает, что если действие триггера включает в себя модификацию других таблиц, для которых в свою очередь определены триггеры, то эти вторичные триггеры не выполняются. (В текущей версии эта опция избыточна, так как в BEFORE-триггере не допускаются операторы модификации).

INSERT/ DELETE / UPDATE - условие активизации, для UPDATE триггер может запускаться при обновлении только заданных столбцов.

ON определяет имя базовой таблицы (не представления!), для которой создается триггер.

REFERENCING - определяет коррелированные имена, по которым действие триггера может обращаться к столбцам изменяемых строк (промежуточным переменным) и к изменяемой таблице:

Существует довольно большое число правил, регламентирующих применение коррелированных имен (см. DB2 SQL Reference)

FOR EACH ROW / STATEMENT - область действия триггера.

MODE DB2SQL - обязательный параметр, не имеющий вариаций в текущих версиях.

WHEN - определяет условие, при котором выполняются последующие операторы. Условие здесь - такое же условие, какое употребляется во фразе WHERE запроса.

Действия триггера могут включать в себя следующие SQL-операторы:

Если в действиях триггера выполняются несколько операторов, то они берутся в операторные скобки BEGIN ATOMIC ... END и разделяются символом "точка с запятой".

Оператор SET применяется только в триггерах и устанавливает значения промежуточных переменных:

Выражение в операторе SET подчиняется правилам, описанным для скалярного выражения в синтаксисе запроса. Выражение не может содержать агрегатных функций, кроме тех случаев, когда они употребляются в скалярном подзапросе. В нем могут употребляться промежуточные переменные NEW и OLD.
Обратите внимание на то, что в составе выражения присваивания можно применять CASE-выражения - это создает возможность выполнять присваивание по некоторой логике.

Оператор SIGNAL применяется только в триггерах и вызывает аварийное завершение триггера и оператора, его вызвавшего:

Строковая константа 1 содержит значение, устанавливаемое в SQLSTATE. Ее размер должен быть 5 символов, в ней допускаются только цифры и большие латинские буквы. Обычно значения, формируемые программистом, начинаются с символа '7'.

Триггеры: Oracle

Триггер создается оператором языка SQL CREATE TRIGGER:

Отличия триггера Oracle от триггера DB2 (многие из них видны из самого синтаксиса оператора) состоят в следующем:

Триггер, выполняемый после (AFTER) выполнения оператора, модифицирующего некоторую таблицу, не может содержать операторы выборки (SELECT) из этой таблицы.


КаталогОглавлениеИндекс раздела