日期:2014-05-16  浏览次数:20427 次

oracle 触发器的种类和触发事件,DML触发器,DDL事件触发器,替代触发器,查看触发器

oracle 触发器的种类和触发事件,DML触发器,DDL事件触发器,替代触发器,查看触发器

触发器的种类和触发事件
触发器必须由事件才能触发。触发器的触发事件分可为3类,分别是DML事件、DDL事件和数据库事件。
每类事件包含若干个事件,如下所示。数据库的事件是具体的,在创建触发器时要指明触发的事件。
种? 类 关 键 字 含??? 义
Sql代码 复制代码
  1. DML事件(3种)???INSERT??在表或视图中插入数据时触发 ??
  2. ????UPDATE??修改表或视图中的数据时触发 ??
  3. ????DELETE??在删除表或视图中的数据时触发 ??
  4. DDL事件(3种)???CREATE??在创建新对象时触发 ??
  5. ????ALTER???修改数据库或数据库对象时触发 ??
  6. ????DROP????删除对象时触发 ??
  7. 数据库事件(5种)???STARTUP?数据打开时触发 ??
  8. ????SHUTDOWN????在使用NORMAL或IMMEDIATE选项关闭数据库时触发 ??
  9. ????LOGON???当用户连接到数据库并建立会话时触发 ??
  10. ????LOGOFF??当一个会话从数据库中断开时触发 ??
  11. ????SERVERERROR?发生服务器错误时触发??
DML事件(3种)	INSERT	在表或视图中插入数据时触发
	UPDATE	修改表或视图中的数据时触发
	DELETE	在删除表或视图中的数据时触发
DDL事件(3种)	CREATE	在创建新对象时触发
	ALTER	修改数据库或数据库对象时触发
	DROP	删除对象时触发
数据库事件(5种)	STARTUP	数据打开时触发
	SHUTDOWN	在使用NORMAL或IMMEDIATE选项关闭数据库时触发
	LOGON	当用户连接到数据库并建立会话时触发
	LOGOFF	当一个会话从数据库中断开时触发
	SERVERERROR	发生服务器错误时触发

触发器的类型可划分为4种:数据操纵语言(DML)触发器、替代(INSTEAD OF)触发器、数据定义语言(DDL)触发器和数据库事件触发器。
各类触发器的作用如下所示。
Sql代码 复制代码
  1. 种??类????简??称????作????用 ??
  2. 数据操纵语言触发器???DML触发器??创建在表上,由DML事件引发的触发器 ??
  3. 替代触发器???INSTEAD?OF触发器???创建在视图上,用来替换对视图进行的插入、删除和修改操作 ??
  4. 数据定义语言触发器???DDL触发器??定义在模式上,触发事件是数据库对象的创建和修改 ??
  5. 数据库事件触发器????—???定义在整个数据库或模式上,触发事件是数据库事件??
种  类	简  称	作    用
数据操纵语言触发器	DML触发器	创建在表上,由DML事件引发的触发器
替代触发器	INSTEAD OF触发器	创建在视图上,用来替换对视图进行的插入、删除和修改操作
数据定义语言触发器	DDL触发器	定义在模式上,触发事件是数据库对象的创建和修改
数据库事件触发器	—	定义在整个数据库或模式上,触发事件是数据库事件

DML触发器的要点
DML触发器是定义在表上的触发器,由DML事件引发。编写DML触发器的要素是:
* 确定触发的表,即在其上定义触发器的表。
* 确定触发的事件,DML触发器的触发事件有INSERT、UPDATE和DELETE三种,说明见下。
* 确定触发时间。触发的时间有BEFORE和AFTER两种,分别表示触发动作发生在DML语句执行之前和语句执行之后。
* 确定触发级别,有语句级触发器和行级触发器两种。语句级触发器表示SQL语句只触发一次触发器,行级触发器表示SQL语句影响的每一行都要触发一次。
由于在同一个表上可以定义多个DML触发器,因此触发器本身和引发触发器的SQL语句在执行的顺序上有先后的关系。它们的顺序是:
* 如果存在语句级BEFORE触发器,则先执行一次语句级BEFORE触发器。
* 在SQL语句的执行过程中,如果存在行级BEFORE触发器,则SQL语句在对每一行操作之前,都要先执行一次行级BEFORE触发器,然后才对行进行操作。如果存在行级AFTER触发器,则SQL语句在对每一行操作之后,都要再执行一次行级AFTER触发器。
* 如果存在语句级AFTER触发器,则在SQL语句执行完毕后,要最后执行一次语句级AFTER触发器。
DML触发器还有一些具体的问题,说明如下:
* 如果有多个触发器被定义成为相同时间、相同事件触发,且最后定义的触发器是有效的,则最后定义的触发器被触发,其他触发器不执行。
* 一个触发器可由多个不同的