在OA的后台编程中有时需要修改已有的触发器,下面是翻译firebird触发器的ALTER TRIGGER使用帮助
修改触发器ALTER TRIGGER
作用:修改和使能一个已经存在的触发器
用于:DSQL, ESQL
语法:
ALTER TRIGGER trigname
[ACTIVE | INACTIVE]
[{BEFORE | AFTER} | ON db_event]
[POSITION number]
[
AS
[]
BEGIN
[]
END
]
::=
[OR [OR ]]
::= { INSERT | UPDATE | DELETE }
::= {
CONNECT |
DISCONNECT |
TRANSACTION START |
TRANSACTION COMMIT |
TRANSACTION ROLLBACK
}
::= { | };
[{ | }; …]
表5.22 ALTER TRIGGER语句参数
参数 | 描述 |
trigname | 一个现有触发器的名称 |
mutation_list | 关系的列表(表|视图)事件 |
number | 触发点的位置。从0到32767 |
declarations | 用于声明本地变量和命名游标的部分 |
declare_var | 局部变量声明 |
declare_cursor | 名叫指针声明 |
PSQL_statements | Firebird编程语言(PSQL)中的语句 |
ALTER TRIGGER语句允许对触发器的头和主体进行某些更改。
允许对触发器所做的更改
• 状态 (活动ACTIVE | 不活动INACTIVE)
• 阶段 (BEFORE | AFTER)
• 事件;但是关系触发器事件不能更改为数据库触发器事件,反之亦然.
• 在触发命令中的位置
• 在触发器主体中修改代码
如果没有指定某个元素,则保持不变。
提醒
BEFORE关键字指示触发器在关联事件发生之前执行;AFTER关键字指示在事件之后执行它。
多个关系事件——INSERT, UPDATE, DELETE——可以在一个触发器中被使用.每个事件应该用OR关键字分隔开.任何事件都不应该被多次提及。
关键字POSITION允许为一系列触发器指定一个可选的执行顺序(“触发顺序”)这与他们的目标有相同的阶段和事件。默认的位置是0。如果没有指定位置,或者多个触发器有一个单独的位置数,触发器将按它们名字的字母顺序执行.
管理员和下列用户有权使用ALTER TRIGGER:
•对于关系触发器,表的所有者
•对于数据库触发器,数据库的所有者
使用ALTER TRIGGER示例:
1. 将set_cust_no触发器设为不活动状态(切换到不活动状态)
ALTER TRIGGER set_cust_no INACTIVE;
2. 更改set_cust_no触发器的触发顺序位置。
ALTER TRIGGER set_cust_no POSITION 14;
3. 将TR_CUST_LOG触发器转换为不活动状态并修改事件列表。
ALTER TRIGGER TR_CUST_LOG
INACTIVE AFTER INSERT OR UPDATE;
4. 将tr_log_connect触发器转换为活动状态,改变它的位置和主体。
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 TRIGGER, CREATE OR ALTER TRIGGER, RECREATE TRIGGER, DROP TRIGGER