FirebirdSQL logo
 VIEWPROCEDURE 

Допустимые изменения

В операторе изменения триггера можно изменить:

  • Состояние активности (ACTIVE | INACTIVE);

  • Фазу (BEFORE | AFTER);

  • Событие(я);

  • Позицию срабатывания;

  • Привилегии выполнения триггера: вызывающего пользователя (SQL SECURITY INVOKER), определяющего пользователя (SQL SECURITY DEFINER) или наследует у таблицы (DROP SQL SECURITY);

  • Код тела триггера.

Если какой-либо элемент не указан, то он остаётся без изменений.

Note

DML триггер невозможно изменить в триггер на событие базы данных и наоборот.

Событие в триггере базы данных невозможно изменить.

Tip
Помните

Триггер с ключевым словом BEFORE наступает до соответствующего события, с ключевым словом AFTER — после соответствующего события.

Один DML триггер может содержать более одного события (INSERT, UPDATE, DELETE). События должны быть разделены ключевым словом OR.Каждое из событий может быть указано не более одного раза.

Ключевое слово POSITION позволяет задать дополнительный порядок выполнения с одинаковыми фазой и событием.По умолчанию позиция равна 0.Если позиция не задана, или если несколько триггеров имеют один и тот же номер позиции, то триггеры будут выполнены в алфавитном порядке их наименований.

Кто может изменить триггеры?

DML триггеры могут изменить:

  • Администраторы

  • Владелец таблицы (представления);

  • Пользователи с привилегией ALTER ANY {TABLE | VIEW}.

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

  • Администраторы

  • Владелец базы данных;

  • Пользователь, имеющий привилегию ALTER DATABASE.

docnext count = 8

Примеры

Example 1. Отключение (перевод в неактивное состояние) триггера
ALTER TRIGGER set_cust_no INACTIVE;
Example 2. Изменение позиции триггера
ALTER TRIGGER set_cust_no POSITION 14;
Example 3. Перевод триггера в неактивное состояние и изменение списка событий
ALTER TRIGGER TR_CUST_LOG
INACTIVE AFTER INSERT OR UPDATE;
Example 4. Изменение привилегий выполнения триггера

После выполнения данного оператора триггер будет выполняться с привилегиями определяющего пользователя (владельца).

ALTER TRIGGER TR_CUST_LOG
SQL SECURITY DEFINER;
Example 5. Удаление привилегий выполнения триггера

После удаления привилегий выполнения триггера, триггер выполняется с привилегиями унаследованными от таблицы.Если у таблицы не определены привилегии выполнения, то триггер будет выполняться с привилегиями вызывающего пользователя.

ALTER TRIGGER TR_CUST_LOG
DROP SQL SECURITY;
Example 6. Перевод триггера в активное состояние, изменение его позиции и его тела
ALTER TRIGGER tr_log_connect
ACTIVE POSITION 1
AS
BEGIN
  INSERT INTO LOG_CONNECT (ID,
                           USERNAME,
                           ROLENAME,
                           ATIME)
  VALUES (NEXT VALUE FOR SEQ_LOG_CONNECT,
          CURRENT_USER,
          CURRENT_ROLE,
          CURRENT_TIMESTAMP);
END

CREATE OR ALTER TRIGGER

Назначение

Создание нового или изменение существующего триггера.

Доступно в

DSQL, ESQL

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

Полное описание оператора см. CREATE TRIGGER.

Оператор CREATE OR ALTER TRIGGER создаёт новый триггер, если он не существует, или изменяет и перекомпилирует его в противном случае, при этом существующие права и зависимости сохраняются.

Примеры

Example 1. Создание нового или изменение существующего триггера
CREATE OR ALTER 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

DROP TRIGGER

Назначение

Удаление существующего триггера.

Доступно в

DSQL, ESQL

Синтаксис
DROP TRIGGER trigname
Table 1. Параметры оператора DROP TRIGGER
Параметр Описание

trigname

Имя триггера.

Оператор DROP TRIGGER удаляет существующий триггер.

Кто может удалить триггеры?

DML триггеры могут удалить:

  • Администраторы

  • Владелец таблицы (представления);

  • Пользователи с привилегией ALTER ANY {TABLE | VIEW}.

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

  • Администраторы

  • Владелец базы данных;

  • Пользователь, имеющий привилегию ALTER DATABASE.

Примеры

Example 1. Удаление триггера
DROP TRIGGER set_cust_no;
См. также:

CREATE TRIGGER, ALTER TRIGGER.

RECREATE TRIGGER

Назначение

Создание нового или пересоздание существующего триггера.

Доступно в

DSQL, ESQL

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

Полное описание оператора см. CREATE TRIGGER.

Оператор RECREATE TRIGGER создаёт новый триггер, если триггер с указанным именем не существует, в противном случае оператор RECREATE TRIGGER попытается удалить его и создать новый.

Примеры

Example 1. Создание или пересоздание триггера
RECREATE 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