|
Триггеры представляют собой особый вид хранимых процедур, которые выполняются автоматически при операциях insert, update, delete таблицы или представления (view). Каждый триггер «цепляется» только к одной таблице, и указываются операции (insert, update или delete), на которые он должен «срабатывать».
Триггеры – мощный механизм, который, однако, следует использовать с осторожностью. C помощью триггеров организуют проверки вставляемых строк на какое-то «хитрое» условие, которое невозможно проверить с помощью обычного CHECK; для автоматического заполнения полей в таблицах; для синхронного обновления данных из нескольких таблиц и пр. Недостатки триггеров проявляются, когда в теле триггера имеются команды модификации других таблиц – может возникнуть неоднозначность с транзакциями, и так называемые гонки триггеров.
В теле триггеров можно обращаться к «еще не вставленным» и «еще не удаленным» строкам, меняя их значение непосредственно перед вставкой или удалением. Эти строки называются контекстными переменными, область действия ограничена пределами триггера.
В Firebird/Interbase существует шесть видов триггеров: для каждой операции (INSERT, UPDATE, DELETE) два варианта вызова триггера (непосредственно до – BEFORE, или сразу после – AFTER, операции) – итого шесть комбинаций. Триггер создается инструкцией:
CREATE TRIGGER ИмяТриггера ON ИмяТаблицы
{ACTIVE|INACTIVE} {BEFORE|AFTER} {INSERT|UPDATE|DELETE} POSITION n
AS
BEGIN
инструкция SQL;
...
инструкция SQL;
END
Здесь через вертикальную черту записываются альтернативы.
Опция ACTIVE указывает, что триггер активный, INACTIVE – триггер временно отключён. Если триггеров, срабатывающих на одну и ту же операцию, несколько, POSITION n (n =0,1,2,…) задает очередность их срабатывания.
Если одним оператором (например, update… where условие) модифицируется несколько строк, то триггер, привязанный к операции UPDATE, будет вызываться для каждой строки. То же касается вставки и удаления группы строк.
Включить или отключить триггер можно инструкцией
ALTER TRIGGER ИмяТриггера {ACTIVE|INACTIVE};
Триггер удаляется оператором
DROP TRIGGER ИмяТриггера;
Контекстные переменные представляют собой структуру (аналог struc на С), и называются NEW – содержит значение новой (вставляемой) строки, и OLD – старой (удаляемой) строки. Поля структур NEW и OLD называются так же, как столбцы таблицы.
Приведем примеры триггеров: 1) Триггер создается для добавления новой строки в таблицу Сотрудники(КодСотрудника (PK), ФИО). Столбец КодСотрудника авто-инкрементный. Если его значение явно не задано, то выбирается значение генератора GEN_STUFF_ID (о генераторах см. методичку по ЛР №1, с.57-59).
CREATE TRIGGER STUFF_BI_0 FOR “Сотрудники”
Дата добавления: 2015-09-11; просмотров: 69 | Поможем написать вашу работу | Нарушение авторских прав |
<== предыдущая лекция | | | следующая лекция ==> |
Хранимые процедуры | | | BEFORE INSERT |