С любым событием, вызывающим изменение содержимого таблицы, можно связать сопутствующее действие (триггер), которое СУБД должна выполнять при каждом возникновении события. Триггер – это группа операторов языка SQL, которые автоматически выполняется при вставке, модификации или удалении записи.
В СУБД InterBase можно создавать триггеры, работающие при следующих шести условиях:
• до вставки записи (BEFORE INSERT);
• после вставки записи (AFTER INSERT);
• до удаления записи (BEFORE DELETE);
• после удаления записи (AFTER DELETE);
• до модификации записи (BEFORE UPDATE);
• после модификации записи (AFTER UPDATE).
В Firebird 1.5 триггер может срабатывать при возникновении одного из нескольких событий. Триггеры могут вызывать выполнение хранимых процедур, выполнять различные проверки и генерировать исключения. Обычно триггеры используются для задания сложных правил контроля целостности базы данных, которые невозможно реализовать с помощью ограничений.
Недостатком триггеров является их влияние на производительность операций с базой данных.
|
|
Синтаксис оператора создания триггера:
CREATE TRIGGER Имя FOR Таблица
[ACTIVE | INACTIVE]
{BEFORE | AFTER}
<операция> [OR <операция> [OR <операция>]]
[POSITION Номер]
AS [<список переменных>] <блок>;
<операция> = {INSERT | UPDATE | DELETE}
<список переменных> =
DECLARE [VARIABLE] Переменная <тип данных>;
[DECLARE [VARIABLE] Переменная <тип данных>;...]
<блок> =
BEGIN
<составной оператор>
[<составной оператор>...]
END
<составной оператор> = <блок> | Оператор;
Параметры, входящие в этот оператор, пояснены в таблице 5.1
Таблица 5.1 – Описание параметров оператора создания триггера
Параметр | Описание |
Имя | Уникальное название триггера. |
ACTIVE | INACTIVE | Указывает будет ли работать триггер |
BEFORE | AFTER | Обязательный параметр, показывающий когда будет срабатывать триггер |
INSERT | UPDATE | DELETE | Одной из событий, на которые будет срабатывать триггер |
POSITION Номер | Определяет порядок срабатывания триггера, когда имеется несколько триггеров, реагирующих на одно и то же событие. Номер – целое число между 0 и 32767 |
DECLARE [VARIABLE] Переменная <тип данных> | Описание локальной переменной, которую можно будет использовать только в этом триггере |
Оператор | Любой одиночный оператор языка хранимых процедур и триггеров InterBase |
Внутри тела триггера доступны две контекстные переменные NEW и OLD, которые позволяют получить доступ к новым и старым значениям полей записи, при изменении которой был вызван триггер.
Пример генератора и триггера:
CREATE GENERATOR EMP_NO_GEN;
CREATE TRIGGER SET_EMP_NO FOR EMPLOYEE
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
IF (NEW.EMP_NO IS NULL) THEN
NEW.EMP_NO = GEN_ID(EMP_NO_GEN, 1);
END;