创建一个新的触发器。
注意事项
“OF column_name”列数据类型不能为LOB。
触发器内部不能出现DDL和DCL操作,普通用户不可以创建系统用户对象。
触发事件为数据**(BEFORE | AFTER INSERT)时,行触发器内部不能出现向被触发表中**数据的操作;触发事件为数据更改(BEFORE | AFTER UPDATE)时,行触发器内部不能出现更改被触发表中数据的操作;触发事件为数据删除(BEFORE | AFTER DELETE)时,行触发器内部不能出现删除被触发表中数据的操作。
在一个表上最多可创建8个触发器。
不支持在本地临时表上创建触发器。
普通用户的触发器不允许基于SYS用户表进行创建。
语法格式
CREATE [ OR REPLACE ] TRIGGER [ schema_name. ]trigger_name { BEFORE | AFTER } { DELETE | INSERT | UPDATE [ OF column_name[,...] ] } [ OR ... ] ON table_name[FOR EACH ROW]
[ param_list ]
BEGIN
statements;
END;
参数说明
OR REPLACE
如果触发器已经存在,替换原有的触发器。
schema_name
要创建的触发器所有者。
trigger_name
要创建的触发器的名称。
{ BEFORE | AFTER }
指定触发时间。BEFORE表示在数据库动作之前触发器执行;AFTER表示在数据库动作之后触发器执行。
{ DELETE | INSERT | UPDATE [ OF column_name[,...] ] } [ OR ... ]
触发事件,指明哪些数据库动作会触发此触发器。
DELETE表示数据库删除会触发此触发器。
INSERT表示数据库**会触发此触发器。
UPDATE表示数据库修改会触发此触发器。
MERGE表示从其他数据源中更新或**时,会触发此触发器。
[ OR ... ]表示指定的多个触发事件之间用OR连接,例如,INSERT OR DELETE表示触发事件是**操作和删除操作。
table_name
数据库触发器所在的表。
[FOR EACH ROW]
使用FOR EACH ROW的触发器为行级触发器;不使用FOR EACH ROW的触发器为语句级触发器。
param_list
声明参数列表。声明语法请参见声明语法。
statements
触发器语句块。不允许为空,为空会报错。可以使用基本语句、动态语句、控制语句、异常语句或其他语句。基本语句详情请参见基本语句,动态语句详情请参见动态语句,控制语句详情请参见控制语句,其他语句详情请参见其他语句,自定义函数详情请参见自定义函数,自定义存储过程请参见创建存储过程。
修改触发器。
语法格式
ALTER TRIGGER [ schema_name. ]trigger_name { ENABLE | DISABLE };
参数说明
schema_name
要修改的触发器所有者。
trigger_name
要修改的触发器名称。
ENABLE
触发器生效。
DISABLE
触发器不生效。
示例
--修改触发器生效。 ALTER TRIGGER trigger_name ENABLE;
删除触发器。
注意事项
删除确定存在的触发器时,可不使用关键字IF EXISTS。删除不确定是否存在的触发器,建议使用“DROP TRIGGER IF EXISTS trigger_name;”,避免因要删除的触发器不存在而返回错误,普通用户不可以删除系统用户对象。
语法格式
DROP TRIGGER [ IF EXISTS ] [ schema_name. ]trigger_name;
参数说明
IF EXISTS
使用IF EXIST时,如果要删除的触发器不存在,删除操作能够执行成功,不会报错。
schema_name
要删除的触发器所有者。
trigger_name
要删除的触发器的名称。
示例
--删除触发器。 DROP TRIGGER IF EXISTS TRIG_BEFORE_INSERT1;