====== ALTER TRIGGER ====== ===== Версии сервера ===== ^ 0.9 ^ 1.0 ^ 1.5.3 ^ 1.5.4 ^ 1.5.5 ^ 2.0 ^ 2.0.3 ^ 2.0.4 ^ 2.1 ^ 2.5 ^ 3.0 ^ | Да | Да | Да | Да | Да | Да | Да | Да | Да | Да | Да | ===== Формат ===== Для Firebird v0.9, Firebird v1.0 ALTER TRIGGER name [ACTIVE | INACTIVE] [{BEFORE | AFTER} {DELETE | INSERT | UPDATE}] [POSITION number] [AS ] [terminator] Для Firebird v1.5 и выше ALTER TRIGGER name [ACTIVE | INACTIVE] [{BEFORE | AFTER} {DELETE | INSERT | UPDATE [OR {DELETE | INSERT | UPDATE} [OR {DELETE | INSERT | UPDATE}]]} ] [POSITION number] [AS ] [terminator] ^ Аргумент ^ Описание ^ |name |Имя существующего триггера.| |ACTIVE |Определяет, что действие триггера дает эффект, когда тот запускается (по умолчанию).| |INACTIVE |Определяет, что действие триггера не дает эффекта.| |BEFORE |Определяет, что триггер срабатывает перед ассоциированной операцией.| |AFTER |Определяет, что триггер срабатывает после ассоциированной операцией.| |DELETE, INSERT, UPDATE| Определяет операцию над таблицей, при которой срабатывает триггер.| |POSITION number |Определяет порядок в котором срабатывают триггеры перед или после того же самого действия. number должен быть целым от 0 до 32767. Триггер с меньшим номером срабатывает раньше. Триггеры для того же самого действия, с тем же самым позиционным номером, будут запущены в случайном порядке.| |trigger_body |Тело триггера, блок инструкций на языке процедур и триггеров. Смотри [[CREATE TRIGGER]] для полного описания.| |terminator |Терминатор, определенный для ISQL командой [[SET TERM]], указывающий на конец тела триггера. Необязателен, при изменении только заголовка триггера.| ===== Описание ===== ALTER TRIGGER изменяет определение существующего триггера. Если какие-либо аргументы инструкции ALTER TRIGGER пропущены, тогда они, по умолчанию, принимают текущие значения, которые определены инструкцией [[CREATE TRIGGER]] или последующей ALTER TRIGGER. ALTER TRIGGER может изменить: * Только информацию заголовка, заключенную в activation status триггера, when it performs its actions, событие, которое запускает триггер и порядок, в котором триггеры запускаются. * Только информацию тела: инструкции которые следуют за предложением AS. * Информацию заголовка и тела триггера. В этом случае новое определение триггера заменяет старое определение. Триггер может быть изменен его создателем и пользователем SYSDBA. :!: Изменение триггера определено автоматически для [[CHECK]] ограничения таблицы, используйте [[ALTER TABLE]], чтобы изменить определение ограничения. ===== Пример ===== Cледующая инструкция изменяет триггер SET_CUST_NO, делая его не активным. (а пассивным :)) ALTER TRIGGER SET_CUST_NO INACTIVE; Следующая инструкция изменяет триггер SET_CUST_NO, чтобы вставлять строку в таблицу NEW_CUSTOMER для каждого нового заказчика: SET TERM !! ; ALTER TRIGGER SET_CUST_NO FOR CUSTOMER BEFORE INSERT AS BEGIN NEW.CUST_NO = GEN_ID(CUST_NO_GEN, 1); INSERT INTO NEW_CUSTOMERS(NEW.CUST_NO, TODAY) END !! SET TERM ; !! Следующая инструкция изменяет триггер AFTER_CUST_INS, чтобы он срабатывал после любого действия над таблицей: SET TERM !! ; ALTER TRIGGER AFTER_CUST_INS FOR CUSTOMER AFTER INSERT OR UPDATE OR DELETE POSITION 200 AS BEGIN POST_EVENT 'CUSTOMER_CHANGED'; END !! SET TERM ; !! ===== См. также ===== [[CREATE TRIGGER]], [[DROP TRIGGER]], [[RDB$TRIGGERS]], [[SET TERM]], [[CREATE PROCEDURE]] ===== Источник ===== langref.pdf