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触发器还有一些具体的问题,说明如下:
* 如果有多个触发器被定义成为相同时间、相同事件触发,且最后定义的触发器是有效的,则最后定义的触发器被触发,其他触发器不执行。
* 一个触发器可由多个不同的