PL/SQL 触发器

触发器是在数据库执行 INSERT, UPDATE, DELETE 操作时自动运行的 PL/SQL 代码。

CREATE [OR REPLACE] TIGGER [triggerschema.]triggername

{ BEFORE | AFTER | INSTEAD OF }

{ INSERT | DELETE | UPDATE [OF column [,...] ] } ...

ON [tableschema.]{tablename | viewname}

[REFERENCING [OLD [AS] old] [NEW [AS] new]]

[FOR EACH ROW [WHEN condition]]

pl/sql_block

ALTER TRIGGER [schema.]triggername { ENABLE | DISABLE }
DROP TRIGGER [schema.]triggername
关键字 描述
triggerschema 包含触发器的架构名
triggername 触发器名
BEFORE  在指定操作前触发
AFTER  在指定操作后触发
INSTEAD OF 替换掉指定的操作
INSERT  INSERT 操作时触发
DELETE  DELETE 操作时触发
UPDATE UPDATE 操作时触发
OF column 指定触发的列,默认为全部列
ON 指定操作的表或视图
tableschema 表或视图的架构名,默认为当前用户
tablename  表名
viewname 视图
REFERENCING  指定相关性名称,该说明允许 PL/SQL 块中的代码指向激活触发器的 DML 语句影响的行的新值或老值
OLD 老值,old.column 可引用原值
NEW 新值,new.column 可引用新值
FOR EACH ROW 指定为行触发器
condition 触发器触发的附加条件
pl/sql_block 触发器激活时执行的代码,引用值可用 ":new.column"

触发器的种类

触发事件 对应语句/行 描述
BEFORE INSERT 语句 在一个 INSERT 语句执行前触发
BEFORE INSERT 在 INSERT 每行记录前触发
AFTER INSERT 语句 在一个 INSERT 语句执行后触发
AFTER INSERT 在 INSERT 每行记录后触发
INSTEAD OF INSERT   替换 INSERT 语句执行
BEFORE UPDATE 语句 在一个 UPDATE 语句执行前触发
BEFORE UPDATE 在 UPDATE 每行记录前触发
AFTER UPDATE 语句 在一个 UPDATE 语句执行后触发
AFTER UPDATE 在 UPDATE 每行记录后触发
INSTEAD OF UPDATE   替换 UPDATE 语句执行
BEFORE DELETE 语句 在一个 DELETE 语句执行前触发
BEFORE DELETE 在 DELETE 每行记录前触发
AFTER DELETE 语句 在一个 DELETE 语句执行后触发
AFTER DELETE 在 DELETE 每行记录后触发
INSTEAD OF DELETE   替换 DELETE 语句执行