Триггеры (Triggers)

С любым событием, вызывающим изменение содержимого таблицы, можно связать сопутствующее действие (триггер), которое СУБД должна выполнять при каждом возникновении события. Триггер – это группа операторов языка 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;


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: