触发器是在数据库执行 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 语句执行 |