FirebirdSQL logo
 VIEWPROCEDURE 

Примеры

Example 1. Создание DML триггера в Legacy стиле
CREATE TRIGGER SET_CUST_NO FOR CUSTOMER
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
  IF (NEW.CUST_NO IS NULL) THEN
    NEW.CUST_NO = GEN_ID(CUST_NO_GEN, 1);
END
Example 2. Создание DML триггера согласно стандарту SQL-2003
CREATE TRIGGER set_cust_no
ACTIVE BEFORE INSERT ON customer POSITION 0
AS
BEGIN
  IF (NEW.cust_no IS NULL) THEN
    NEW.cust_no = GEN_ID(cust_no_gen, 1);
END
Example 3. Создание DML триггера выполняющегося с правами определяющего пользователя
CREATE TRIGGER set_cust_no
ACTIVE BEFORE INSERT ON customer POSITION 0
SQL SECURITY DEFINER
AS
BEGIN
  IF (NEW.cust_no IS NULL) THEN
    NEW.cust_no = GEN_ID(cust_no_gen, 1);
END
Example 4. Создание DML триггера на несколько событий
CREATE TRIGGER TR_CUST_LOG
ACTIVE AFTER INSERT OR UPDATE OR DELETE
ON CUSTOMER POSITION 10
AS
BEGIN
  INSERT INTO CHANGE_LOG (LOG_ID,
                          ID_TABLE,
                          TABLE_NAME,
                          MUTATION)
  VALUES (NEXT VALUE FOR SEQ_CHANGE_LOG,
          OLD.CUST_NO,
          'CUSTOMER',
          CASE
            WHEN INSERTING THEN 'INSERT'
            WHEN UPDATING  THEN 'UPDATE'
            WHEN DELETING  THEN 'DELETE'
          END);
END
См. также:

ALTER TRIGGER, DROP TRIGGER.

Триггеры на событие базы данных

Триггер может быть создан для одного из событий базы данных:

  • CONNECT (соединение с базой данных или после сброса сеанса);

  • DISCONNECT (отсоединение от базы данных или перед сбросом сеанса);

  • TRANSACTION START (старт транзакции);

  • TRANSACTION COMMIT (подтверждение транзакции);

  • TRANSACTION ROLLBACK (откат транзакции).

Контекстная переменная RESETTING может использоваться в триггерах на события CONNECT и DISCONNECT для того, чтобы отличить сброс сеанса от подключения/отключения от базы данных.

Указать для триггера несколько событий базы данных невозможно.