PL/SQL-->DML 触发器
何谓触发器?简言之,是一段命名的PL/SQL代码块,只不过该代码块在特定的条件下被触发并且执行。对于这样的代码我们称之为触发器
。触发器根据触发类型的不同又分为不同级别的触发器,下面将给出触发器的分类,定义,以及使用的示例。
一、触发器的相关概念
1.触发器的分类
通常根据触发条件以及触发级别的不同分为DML触发器,INSTEAD OF 触发器,系统事件触发器。
DML触发器
通过ML语句进行触发,可以在DML操作前或操作后进行触发,并且可以对每个行或语句操作上进行触发。
INSTEAD OF 触发器
在ORACLE里,对于简单视图,可以直接使用DML进行操作,而复杂视图则不能直接使用DML,因此INSTEAD OF
触发器应运而生。
INSTEAD OF 触发器主要是为解决复杂视图不能执行DML而创建。
系统事件触发器
通过ORACLE数据库系统事件进行触发,如ORACLE系统的启动与关闭等.使用系统触发器,便于系统跟踪,监测数据库变化情况等。
2.触发器的组成(一段PL/SQL代码块,可以由PL/SQL,Java,C进行开发,特定事件发生将被触发)
a.触发事件
Oracle 启动、关闭
Oracle 错误消息
用户登录与断开会话
特定的表、视图上的DML操作
基于schema的DDL操作
b.触发时间
即该TRIGGER 是在触发事件发生之前(BEFORE)还是之后(AFTER)触发,也就是触发事件和该TRIGGER 的操作顺序。
c.触发器本身
指实际的触发代码,当触发事件发生后,触发器代码决定将做何种操作。
触发器代码大小不能超过32k,对于超长的代码可以将其置于单独的存储过程,然后在触发器中使用call 调用该过程。
触发器代码只能包含DQL,DML,而不能包含DDL以及事务控制语言(COMMIT,ROLLBACK,SAVEPOINT)
。
d.触发频率
说明触发器内定义的动作被执行的次数。即语句级(STATEMENT)触发器和行级(ROW)触发器。
语句级(STATEMENT)触发器:是指当某触发事件发生时,该触发器只执行一次。
行级(ROW)触发器:是指当某触发事件发生时,对受到该操作影响的每一行数据,触发器都单独执行一次。
3.触发器的用途