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