CREATE TRIGGER <имя_триггера> FOR {ТАБЛИЦА | ОБЗОР}
{ACTIVE | INACTIVE}
{BEFORE | AFTER} {DELETE | INSERT | UPDATE}
[POSITION number]
AS
<тело триггера>
Синтаксические конструкции команды CREATE TRIGGER
Параметр
Описание
Имя_триггера
Задает имя триггера
Таблица | обзор
Имя таблицы или обзора, для которх создается триггер
ACTIVE | INACTIVE
Необязательная конструкция. определяет активность триггера. ACTIVE - триггер включен, INACTIVE – триггер отключен.
BEFORE | AFTER
Обязательный. Определяет, когда включается триггер. BEFORE – перед операцией, выполняемой над таблицей, AFTER – после операции, выполняемой над таблицей.
DELETE | INSERT | UPDATE
Указывает, при выполнении какой именно операции, будет включаться триггер.
POSITION number
Задает порядок, в котором будут выполняться триггеры (с одной таблицей и с одними и теми же включениями может быть связано несколько триггеров).
Number должен быть целым числом между 0 и 32767 включительно. включение триггеров происходит в порядке возрастания номеров. Если триггеры имеют один и тот же номер, то они будут вклчаться в алфавитном порядке их имен.
тело триггера
Состоит из двух частей:
1) DECLARE VARIABLE <имя переменной> <тип_данных>; - объявляет локальные переменные, используемые только в триггере.
2) непосредственно тело триггера как последовательный набор операций, заключенный в операторные скобки
Рассмотрим примеры.
Пример 4.1. Триггер для контроля добавления данных в таблицу студент.
CREATE TRIGGER I_1
FOR STUDENT
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
IF (NEW.SURNAME IS NULL) THEN EXCEPTION NO_USER;
IF (NEW.NAME IS NULL) THEN NEW.NAME = "ИМЯ";
END
Пример 2. проверяется заполнение внешнего ключа таблицы студент (значение идентификатора университета должно существовать в базе данных).
CREATE TRIGGER I_2
FOR STUDENT
ACTIVE BEFORE INSERT POSITION 1
AS
BEGIN
IF (NEW.UNIV_ID >0) THEN
IF (NOT EXISTS (SELECT * FROM UNIVERSITY
WHERE (UNIV_ID = NEW.UNIV_ID))) THEN EXCEPTION NO_UNIV;