FirebirdSQL logo

Триггер (trigger) — это хранимая процедура особого типа, которая не вызывается непосредственно, а исполнение которой обусловлено наступлением одного из событий, относящегося к одной конкретной таблице (представлению), или наступлению одного из событий базы данных.

Триггер — это особый тип хранимой процедуры, которая не вызывается напрямую, а выполняется, когда в связанной таблице или представлении происходит указанное событие. DML триггер специфичен для одного и только одного отношения (таблица или представление) и одной фазы во времени события (ДО или ПОСЛЕ).Его можно задать для выполнения для одного конкретного события (вставка, обновление, удаление) или для некоторой комбинации двух или трех из этих событий.

Помимо DML триггеров существуют также:* Триггеры на события базы данных, которые происходят при начале или завершении соединения, или транзакции.* DDL триггеры, которые срабатывают до или после выполнения одного или нескольких типов DDL операторов.

CREATE TRIGGER

Назначение

Создание нового триггера.

Доступно в

DSQL, ESQL

Синтаксис
CREATE TRIGGER trigname {
    <relation_trigger_legacy>
  | <relation_trigger_sql2003>
  | <database_trigger>
  | <ddl_trigger> }
<routine body>

<relation_trigger_legacy> ::=
  FOR {tablename | viewname}
  [ACTIVE | INACTIVE]
  {BEFORE | AFTER} <mutation_list>
  [POSITION number]

<relation_trigger_sql2003> ::=
  [ACTIVE | INACTIVE]
  {BEFORE | AFTER} <mutation_list>
  ON {tablename | viewname}
  [POSITION number]

<database_trigger> ::=
  [ACTIVE | INACTIVE]
  ON db_event
  [POSITION number]

<ddl_trigger> ::=
  [ACTIVE | INACTIVE]
  {BEFORE | AFTER} <ddl_events>
  [POSITION number]

<mutation_list> ::= <mutation> [OR <mutation> [OR <mutation>]]

<mutation> ::=  INSERT | UPDATE | DELETE

<db_event> ::=
    CONNECT | DISCONNECT
  | TRANSACTION {START | COMMIT | ROLLBACK}


<ddl_events> ::= {
    ANY DDL STATEMENT
  | <ddl_event_item> [{OR <ddl_event_item>} ...]
}

<ddl_event_item> ::=
    {CREATE | ALTER | DROP} TABLE
  | {CREATE | ALTER | DROP} PROCEDURE
  | {CREATE | ALTER | DROP} FUNCTION
  | {CREATE | ALTER | DROP} TRIGGER
  | {CREATE | ALTER | DROP} EXCEPTION
  | {CREATE | ALTER | DROP} VIEW
  | {CREATE | ALTER | DROP} DOMAIN
  | {CREATE | ALTER | DROP} ROLE
  | {CREATE | ALTER | DROP} SEQUENCE
  | {CREATE | ALTER | DROP} USER
  | {CREATE | ALTER | DROP} INDEX
  | {CREATE | DROP} COLLATION
  | ALTER CHARACTER SET
  | {CREATE | ALTER | DROP} PACKAGE
  | {CREATE | DROP} PACKAGE BODY
  | {CREATE | ALTER | DROP} MAPPING

<routine-body> ::=
    <psql-routine-spec>
  | <external-routine-spec>

<psql-routine-spec> ::=
  [<rights-clause>] <psql-routine-body>


<rights-clause> ::=
  SQL SECURITY {DEFINER | INVOKER}

<psql-routine-body> ::=
  См. Синтаксис тела модуля

<external-routine-spec> ::=
  <external-routine-reference>
  [AS <extbody>]

<external-routine-reference> ::= EXTERNAL NAME <extname> ENGINE <engine>

<extname> ::= '<module-name>!<routine-name>[!<misc-info>]'
Table 1. Параметры оператора CREATE TRIGGER
Параметр Описание

trigname

Имя триггера.Может содержать до 63 символов.

relation_trigger_legacy

Объявление табличного триггера (унаследованное).

relation_trigger_sql2003

Объявление табличного триггера согласно стандарту SQL-2003.

database_trigger

Объявление триггера базы данных.

ddl_trigger

Объявление DDL триггера.

tablename

Имя таблицы.

viewname

Имя представления.

mutation_list

Список событий таблицы.

mutation

Одно из событий таблицы.

db_event

Событие соединения или транзакции.

ddl_events

Список событий изменения метаданных.

ddl_event_item

Одно из событий изменения метаданных.

number

Порядок срабатывания триггера.От 0 до 32767.

extbody

Тело внешнего триггера. Строковый литерал который можетиспользоваться UDR для различных целей.

module-name

Имя внешнего модуля.

routine-name

Имя точки входа внутри модуля.

misc-info

Различная информация используемая внешним триггером по своемуусмотрению.

Оператор CREATE TRIGGER создаёт новый триггер.Триггер может быть создан для события (или событий) отношения (таблицы или представления), для события (событий) изменения метаданных или для одного из событий базы данных.

Оператор CREATE TRIGGER, как и его родственники ALTER TRIGGER, CREATE OR ALTER TRIGGER и RECREATE TRIGGER являются составными операторами, содержащими заголовок и тело.

Заголовок определяет имя триггера, а также содержит имя отношения (для табличных триггеров), фазу триггера, событие (или события) на которые срабатывает триггер и позицию.Имя триггера должно быть уникальным среди имён других триггеров.