FirebirdSQL logo
 VIEWPROCEDURE 

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

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

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

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

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

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

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

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

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

Примеры

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