- •Тема 4.3. Триггеры и хранимые процедуры
- •1. Триггеры и их назначение
- •2. Хранимые процедуры и их назначение
- •3. Sql для процедур и триггеров InterBase
- •3.1 Оператор присваивания
- •3.2 Оператор объявления переменных declare
- •3.3 Оператор генерации исключения
- •3.4 Оператор вызова процедуры
- •3.5 Оператор ветвления
- •3.6 Оператор цикла
- •3.7 Оператор цикла while
- •3.8 Оператор генерации события post_event
- •3.9 Операторы sql insert, update, select, delete
- •3.10 Оператор возврата значений выходных параметров suspend
- •3.11 Оператор прерывания процедуры exit
- •3.12 Оператор обработки ошибок when
- •4. Команды создания, удаления и модифиации триггеров
4. Команды создания, удаления и модифиации триггеров
4.1 создание триггеров
синтаксис команды:
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;
END