11.1.4 触发器的语法
了解语法是使用触发器的第一步,它就像一个公式,能让我们迅速地创建出自己的触发器。下面列出了几种触发器的语法。
1)DML触发器的主要语法如下:
01 CREATE[OR REPLACE]TRIGGER[schema.]trigger
02 {BEFORE|AFTER|INSTEAD OF}
03 {DELETE|INSERT|UPDATE
04 [OF column[,column]…]
05 }
06 [OR{DELETE|INSERT|UPDATE
07 [OF column[,column]…]
08 }
09 ]…
10 {ON[schema.]table|[schema.]view}
11 [FOR EACH ROW]
12 [FOLLOWS[schema.]trigger[,[schema.]trigger]…]
13 [ENABLE|DISABLE]
14 [WHEN(condition)]
15 trigger_body
【语法说明】
❑OR REPLACE:新建的触发器可以覆盖原有同名触发器。
❑TRIGGER:创建触发器的关键词。
❑schema:触发器所属模式(可简单看成用户名),如果不加该项则表示该触发器属于自己。
❑BEFORE:触发器类型为前触发。
❑AFTER:触发器类型为后触发。
❑INSTEAD OF:表示触发器类型为替换类型。
❑DELETE|INSERT|UPDATE:表示触发的事件。
❑[OF column[,column]:触发条件具体到的某列。
❑第6~9行表示可以追加多个条件。
❑ON[schema.]table|[schema.]view:该触发器作用的表或视图,INSTEAD OF类型可以作用在视图上。
❑FOR EACH ROW:表示行级触发器,省略则为语句级触发器。
❑FOLLOWS[schema.]trigger:触发器执行的顺序。
❑ENABLE|DISABLE:设置触发器是否可用状态。
❑WHEN(condition):触发该触发器的条件。
❑trigger_body:表示触发器的函数体。
2)DDL和数据库事件触发器语法如下:
01 CREATE[OR REPLACE]TRIGGER[schema.]trigger
02 {BEFORE|AFTER}
03 {ddl_event[OR ddl_event]…
04 |database_event[OR database_event]…
05 }
06 ON{[schema.]SCHEMA
07 |DATABASE
08 }
09 [FOLLOWS[schema.]trigger[,[schema.]trigger]…]
10 [ENABLE|DISABLE]
11 [WHEN(condition)]
12 trigger_body
【语法说明】
❑OR REPLACE:新建的触发器可以覆盖原有同名触发器。
❑TRIGGER:创建触发器的关键词。
❑schema:触发器所属模式,如果不加该项则表示该触发器属于自己。
❑BEFORE:触发器类型为前触发。
❑AFTER:触发器类型为后触发。
❑ddl_event[OR ddl_event]:DDL事件,用OR连接。
❑database_event[OR database_event]:数据库事件,用OR连接。
❑[schema.]SCHEMA|DATABASE:触发器可作用在模式上或数据库上。
❑FOLLOWS[schema.]trigger:触发器执行的顺序。
❑ENABLE|DISABLE:设置触发器是否可用状态。
❑WHEN(condition):触发该触发器的条件。
❑trigger_body:表示触发器的函数体。
表11.1列出了一部分DDL事件,这些事件都可以激发触发器。
表11.2列出了部分数据库事件,这些事件也会激发触发器。
触发器由三部分组成。它们分别是触发事件或语句、触发器限制、触发器动作。
❑触发事件或语句是指激发触发器的动作,具体指11.1.1小节介绍的事件操作。
❑触发器限制指的是WHEN后面的条件,当条件为TRUE时,该触发器会被激发。
❑触发器动作就是一段过程,当触发器被激发时运行的trigger_body部分。
3)复合触发器也是DML触发器的一种,它的主要语法如下:
01 CREATE[OR REPLACE]TRIGGER[schema.]trigger
02 FOR
03 {DELETE|INSERT|UPDATE
04 [OF column[,column]…]
05 }
06 [OR{DELETE|INSERT|UPDATE
07 [OF column[,column]…]
08 }
09 ]…
10 ON{[schema.]table
11 |[schema.]view
12 }
13 COMPOUND TRIGGER
14 {BEFORE STATEMENT IS tps_body END BEFORE STATEMENT]
15 |BEFORE EACH ROW IS tps_body END BEFORE EACH ROW
16 |AFTER STATEMENT IS tps_body END AFTER STATEMENT
17 |AFTER EACH ROW IS tps_body END AFTER EACH ROW
18 }
【语法说明】
❑OR REPLACE:新建的触发器可以覆盖原有同名触发器。
❑TRIGGER:创建触发器的关键词。
❑schema:触发器所属模式,如果不加该项则表示该触发器属于自己。
❑DELETE|INSERT|UPDATE:表示触发事件。
❑COMPOUND TRIGGER:定义触发器时表示为复合类型触发器。
❑BEFORE STATEMENT:前语句级触发。
❑BEFORE EACH ROW:前行级触发。
❑AFTER STATEMENT:后语句级触发。
❑AFTER EACH ROW:后行级触发。
❑tps_body:具体语句或程序。
该类型是Oracle 11g新增加的触发器类型,比较方便地处理4个时间点,这将在后面章节介绍。