Триггеры и хранимые процедуры представляют собой именованные блоки команд SQL, откомпилированные и хранимые на сервере базы данных. Хранимая процедура может вызываться из приложения или из другой хранимой процедуры или триггера. Триггер выполняется автоматически при наступлении некоторого события: вставки, удаления или изменения строки таблицы. Триггер ссылочной целостности (RI‑триггер) реализует правила ссылочной целостности. По умолчанию RI‑триггер реализует объявленную ссылочную целостность (п. 3.2.3).
Для генерации триггеров используется механизм шаблонов (набор макрокоманд, которые автоматически корректируются в соответствии с выбранной СУБД при генерации кода триггера).
Можно переопределить триггер, установленный по умолчанию одним из способов:
· Переопределение шаблона триггера для ссылочной целостности. Для каждого правила ссылочной целостности создать переопределенный шаблон и использовать его вместо применяемого по умолчанию при включенной опции RI Type Override при генерации схемы.
· Переопределение шаблона триггера для связи. Для конкретной связи создать переопределенный шаблон и использовать его вместо применяемого по умолчанию при включенной опции Relationship Override при генерации схемы.
· Переопределение шаблона триггера для сущности. Для конкретной сущности создать переопределенный шаблон и использовать его вместо применяемого по умолчанию при включенной опции Entity Override при генерации схемы.
Пример переопределения шаблона тригера для сущности. Создадим таблицу Архив клиентов, в которую будут записываться: дата изменения (DK), имя пользователя, производившего изменния (User), старые (KKOLD, NKOLD) и новые (KKNEW, NKNEW) значения колонок изменяемой строки таблицы Клиент (рисунок 3.3.7.1).
Рисунок 3.3.7.1. Таблицы клиентов и архива клиентов
1. Выполним команду Triggers из контекстного меню таблицы Клиент и нажмем кнопку New для создания триггера SaveValues (рисунок 3.3.7.2).
2. На странице General установим параметры. В полях Old и New укажем имена ссылок на старые и новые значения.
3. На странице Code откорректируем заготовку триггера (изменения в тексте выделены шрифтом):