Студопедия
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Триггеры

Триггеры представляют собой особый вид хранимых процедур, которые выполняются автоматически при операциях 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

lektsii.net - Лекции.Нет - 2014-2025 год. (0.005 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав