oracle 触发器的种类和触发事件,DML触发器,DDL事件触发器,替代触发器,查看触发器
    
触发器的种类和触发事件 触发器必须由事件才能触发。触发器的触发事件分可为3类,分别是DML事件、DDL事件和数据库事件。 
每类事件包含若干个事件,如下所示。数据库的事件是具体的,在创建触发器时要指明触发的事件。 
种? 类 关 键 字 含??? 义 
- DML事件(3种)???INSERT??在表或视图中插入数据时触发 ??
 
- 
????UPDATE??修改表或视图中的数据时触发 ??
 
- 
????DELETE??在删除表或视图中的数据时触发 ??
 
- 
DDL事件(3种)???CREATE??在创建新对象时触发 ??
 
- 
????ALTER???修改数据库或数据库对象时触发 ??
 
- 
????DROP????删除对象时触发 ??
 
- 数据库事件(5种)???STARTUP?数据打开时触发 ??
 
- ????SHUTDOWN????在使用NORMAL或IMMEDIATE选项关闭数据库时触发 ??
 
- ????LOGON???当用户连接到数据库并建立会话时触发 ??
 
- ????LOGOFF??当一个会话从数据库中断开时触发 ??
 
- ????SERVERERROR?发生服务器错误时触发??
 
 
DML事件(3种)	INSERT	在表或视图中插入数据时触发
	UPDATE	修改表或视图中的数据时触发
	DELETE	在删除表或视图中的数据时触发
DDL事件(3种)	CREATE	在创建新对象时触发
	ALTER	修改数据库或数据库对象时触发
	DROP	删除对象时触发
数据库事件(5种)	STARTUP	数据打开时触发
	SHUTDOWN	在使用NORMAL或IMMEDIATE选项关闭数据库时触发
	LOGON	当用户连接到数据库并建立会话时触发
	LOGOFF	当一个会话从数据库中断开时触发
	SERVERERROR	发生服务器错误时触发
触发器的类型可划分为4种:数据操纵语言(DML)触发器、替代(INSTEAD OF)触发器、数据定义语言(DDL)触发器和数据库事件触发器。 
各类触发器的作用如下所示。 
- 种??类????简??称????作????用 ??
 
- 数据操纵语言触发器???DML触发器??创建在表上,由DML事件引发的触发器 ??
 
- 
替代触发器???INSTEAD?OF触发器???创建在视图上,用来替换对视图进行的插入、删除和修改操作 ??
 
- 数据定义语言触发器???DDL触发器??定义在模式上,触发事件是数据库对象的创建和修改 ??
 
- 数据库事件触发器????—???定义在整个数据库或模式上,触发事件是数据库事件??
 
 
种  类	简  称	作    用
数据操纵语言触发器	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触发器还有一些具体的问题,说明如下: 
* 如果有多个触发器被定义成为相同时间、相同事件触发,且最后定义的触发器是有效的,则最后定义的触发器被触发,其他触发器不执行。 
* 一个触发器可由多个不同的