| Каталог | Оглавление | Индекс раздела |
Триггеры - средство, обеспечивающее автоматическое выполнение некоторых действий при каждой модификации таблицы.
Триггер характеризуется следующими классификационными признаками, которые должны быть заданы при его создании:
Таким образом, для каждой таблицы может быть создано до 12 типов триггеров. На самом деле, триггеров может быть и больше, так как может быть создано и несколько триггеров одного типа. В таком случае однотипные триггеры выполняются в порядке их создания.
При обеспечении в общем-то одинаковой функциональности, синтаксис и некоторые детали применения триггеров различаются в DB2 и Oracle, поэтому мы рассматриваем их раздельно.
Триггер создается оператором языка SQL CREATE TRIGGER:
|
NO CASCADE BEFORE / AFTER - определяет время активизации триггера. NO CASCADE указывает, что если действие триггера включает в себя модификацию других таблиц, для которых в свою очередь определены триггеры, то эти вторичные триггеры не выполняются. (В текущей версии эта опция избыточна, так как в BEFORE-триггере не допускаются операторы модификации).
INSERT/ DELETE / UPDATE - условие активизации, для UPDATE триггер может запускаться при обновлении только заданных столбцов.
ON определяет имя базовой таблицы (не представления!), для которой создается триггер.
REFERENCING - определяет коррелированные имена, по которым действие триггера может обращаться к столбцам изменяемых строк (промежуточным переменным) и к изменяемой таблице:
FOR EACH ROW / STATEMENT - область действия триггера.
MODE DB2SQL - обязательный параметр, не имеющий вариаций в текущих версиях.
WHEN - определяет условие, при котором выполняются последующие операторы. Условие здесь - такое же условие, какое употребляется во фразе WHERE запроса.
Действия триггера могут включать в себя следующие SQL-операторы:
Оператор SET применяется только в триггерах и устанавливает значения промежуточных переменных:
|
Выражение в операторе SET подчиняется правилам, описанным для скалярного выражения в синтаксисе запроса. Выражение не может содержать агрегатных функций, кроме тех случаев, когда они употребляются в скалярном подзапросе. В нем могут употребляться промежуточные переменные NEW и OLD.
Обратите внимание на то, что в составе выражения присваивания можно применять CASE-выражения - это создает возможность выполнять присваивание по некоторой логике.
Оператор SIGNAL применяется только в триггерах и вызывает аварийное завершение триггера и оператора, его вызвавшего:
|
Строковая константа 1 содержит значение, устанавливаемое в SQLSTATE. Ее размер должен быть 5 символов, в ней допускаются только цифры и большие латинские буквы. Обычно значения, формируемые программистом, начинаются с символа '7'.
Триггер создается оператором языка SQL CREATE TRIGGER:
|
Отличия триггера Oracle от триггера DB2 (многие из них видны из самого синтаксиса оператора) состоят в следующем:
Триггер, выполняемый после (AFTER) выполнения оператора, модифицирующего некоторую таблицу, не может содержать операторы выборки (SELECT) из этой таблицы.
| Каталог | Оглавление | Индекс раздела |