Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
4.3. Триггеры и хранимые процедуры.doc
Скачиваний:
67
Добавлен:
11.05.2015
Размер:
126.46 Кб
Скачать

Команды создания, удаления и модифиации триггеров

Создание триггеров

синтаксис команды:

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) непосредственно тело триггера как последовательный набор операций, заключенный в операторные скобки

Рассмотрим примеры.

Пример 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;

END