Язык SQL. Триггеры. Триггеры. Для создания триггера используется оператор create trigger, синтаксис которого представлен ниже
Скачать 13.71 Kb.
|
Триггеры Для создания триггера используется оператор CREATE TRIGGER, синтаксис которого представлен ниже: CREATE TRIGGER <имя триггера> [ACTIVE | INACTIVE} { ON <событие базы данных> | FOR {<имя таблицы> | <имя представления>} {BEFORE | AFTER} <событие таблицы (представления)> [OR <событие таблицы (представления)>] ... | {BEFORE | AFTER} <событие таблицы (представления)> [OR <событие таблицы (представления)>] ... ON {<имя таблицы> | <имя представления>} } [POSITION <целое>] AS <тело триггера>; <событие таблицы (представления)> ::= {INSERT | UPDATE | DELETE} <событие базы данных> ::= { CONNECT | DISCONNECT | TRANSACTION START | TRANSACTION COMMIT | TRANSACTION ROLLBACK } Триггер может быть активным (ACTIVE) или неактивным (INACTIVE). Если триггер активен (значение по умолчанию), то он автоматически вызывается при наступлении соответствующего события (событий) таблицы или базы данных. Если триггер неактивен, то вызов триггера не происходит. Структура тела триггера: [<объявление локальных переменных>] BEGIN <оператор> [<оператор> … ] END После описания локальных переменных в теле триггера следует блок операторов, заключенных в операторные скобки BEGIN и END. Для триггеров существуют специфические контекстные переменные OLD и NEW. Более правильное название этих ключевых слов - префиксы имен столбцов. В триггерах можно обращаться к значению любого столбца таблицы (представления) до его изменения в клиентской программе (для этого перед именем столбца помещается ключевое слово OLD и точка) и после изменения (перед именем столбца помещается NEW и точка). Контекстная переменная OLD (префикс имени столбца) для всех видов триггеров является переменной только для чтения. Она недоступна в триггерах, вызываемых при добавлении данных, независимо от фазы события. Контекстная переменная NEW в триггерах для фазы события после (AFTER) также является переменной только для чтения. Она недоступна в триггерах для события удаления данных. Значение OLD.ИмяСтолбца – позволяет обратиться к состоянию столбца, имевшему место до внесения возможных изменений. Значение NEW.ИмяСтолбца - позволяет обратиться к состоянию столбца после внесения возможных изменений. Пример: CREATE TRIGGER BU_TOVARY FOR TOVARY ACTIVE BEFORE UPDATE AS BEGIN IF (OLD.TOVAR<>NEW.TOVAR) THEN UPDATE PRODAJA SET TOVAR=NEW.TOVAR WHERE TOVAR=OLD.TOVAR; END В этом примере триггер вносит соответствующие изменения в таблицу PRODAJA, если в записи таблицы TOVARY изменилось значение столбца TOVAR. Нельзя создавать один триггер для нескольких событий таблицы (представления) или нескольких событий базы данных. Для изменения заголовка и/или тела существующего триггера используется оператор ALTER TRIGGER. В операторе изменения триггера можно изменить его состояние активности (ACTIVE / INACTIVE), событие (события) таблицы (представления) и фазу события, позицию триггера и выполняемые триггером действия. Для удаления существующего триггера используется оператор DROP TRIGGER <имя триггера> |