ТРИГГЕРЫ

Триггер (trigger) представляет собой процедуру особого типа, которая вызывается автоматически при модификации записей БД, т. е. при изменении значений столбцов или при их удалении и добавлении. Фактически триггеры являются разновидностью хранимых процедур, но пользователю они не доступны, а доступны только БД.

Запуск триггера обусловлен наступлением определенного события (действия) — по сути, добавления INSERT или удаления DELETE строки в заданной таблице, а так же при модификации UPDATE данных в определенном столбце заданной таблицы БД.

Момент запуска триггера определяется с помощью ключевых слов BEFORE, когда триггер запускается до выполнения связанного с ним события, например, до добавления записи, или AFTER, когда триггер запускается до выполнения связанного с ним события. В случае, если триггер вызывается до наступления события, он может внести изменения в модифицируемую событием запись, конечно, при условии, что событие — не удаление записи.

Триггеры обычно используются для поддержки ссылочной целостности, каскадного изменения или удаления данных, архивирования удаленных или измененных данных, отслеживания изменений или вызова пользовательских или системных хранимых процедур и программной реализации, так называемых бизнес-правил.

Триггер – поименованный объект БД, который ассоциирован с таблицей и активируется при наступлении определенного события, связанного с этой таблицей. Триггер запускается сервером БД автоматически при попытке изменения данных в таблице, с которой он связан. Все производимые им модификации данных рассматриваются как выполняемые в транзакции, в которой выполнено действие, вызвавшее срабатывание триггера. Соответственно, в случае обнаружения ошибки или нарушения целостности данных может произойти откат этой транзакции.

Создание триггера подобно для многих СУБД. Покажем это на примере СУБД InterBase:

CREATE TRIGGER <Имя триггера> FOR <Имя таблицы>

[active | inactive]

{before | after}

{update | insert | delete}

[position <Число>]

AS <Тело триггера>

Описатели active и inactive определяет активность триггера стразу после его создания. По умолчанию действует active.

Описатели before и after задают момент начала выполнения триггера.

Описатели update, insert и delete определяют момент (событие) выполнения триггера.

При наличии нескольких триггеров для одного события определяют порядок вызова триггеров, который указывается в операнде position.

Триггер можно удалить оператором DROP TRIGGER <Имя триггера>

Изменяется триггер оператором ALTER TRIGGER <Имя триггера>

Программирование триггера ничем не отличается от программирования хранимых процедур. Например:

CREATE TRIGGER Table_example_bi FOR Nakls

ACTIVE BEFORE INSERT POSITION 0

as

begin

if (NPrice IS NULL) then

NPrice = 0.0;