Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции.docx
Скачиваний:
44
Добавлен:
18.02.2016
Размер:
364.62 Кб
Скачать

Триггеры

Триггерами называются подпрограммы, которые всегда выполняются автоматически на стороне сервера, в ответ на изменение данных в таблицах БД.

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

Триггер может выполняться в двух фазах изменения данных: до(Before) какого то события, или после(After) него. Синтаксис определения триггера следующий:

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

[ACTIVE | INACTIVE]

{BEFORE | AFTER} {DELETE | INSERT \ UPDATE}

[POSITION <число>]

AS

[DECLARE [VARIABLE] <переменная тип_данных>;]

BEGIN

<операторы_триггера>

END

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

[ACTIVE | INACTIVE]

Необязательный параметр определяет, будет триггер запускаться в ответ на событие, или не будет. По умолчанию устанавливается ACTIVE, то есть триггер будет запускаться. Отключение триггера иногда может быть полезным при отладке приложения.

{BEFORE | AFTER} {DELETE | INSERT | UPDATE}

Два обязательных параметра, комбинация которых может запрограммировать триггер на шесть различных событий:

Таблица 20.1. . Варианты возможных событий триггера

Комбинация параметров

Описание

BEFORE INSERT

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

AFTER INSERT

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

BEFORE DELETE

Триггер вызывается перед удалением записи. Чаще всего его используют для реализации бизнес-правил.

AFTER DELETE

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

BEFORE UPDATE

Триггер вызывается перед принятием новых значений в поля записи. Позволяет менять входные значения.

AFTER UPDATE

Триггер вызывается после принятия изменений в запись. Не позволяет менять значения. Обычно используется для модификации связанных таблиц.

Эти шесть вариантов реагирования на события делают триггер самым мощным средством для реализации бизнес-правил, проверки целостности и непротиворечивости данных.

[POSITION <число>]

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

AS

Как и в хранимых процедурах, командой AS начинается тело триггера. Перед операторской скобкой BEGIN имеется возможность объявить одну или несколько локальных переменных, если они нужны, оператором

[DECLARE [VARIABLE] <переменная тип_данных>;]