知识点的梳理:
- Oracle中的触发器分为DML触发器,instead-of(替代)触发器,DDL触发器,系统触发器和数据库事件触发器;
-
DML 触发器中分为以下两类:
- 表级触发器:所有更新操作只在之前或之后触发一次;
- 行级触发器:针对更新的每一行分别进行之前或之后触发;
- 行级触发器中可以使用":old"取得更新前的数据,使用":new"取得更新后的数据;
- 复合触发器是在Oracle11G之后增加的新功能,可以进行4个触发事件操作;
- 如果要对视图进行更新操作,则应该使用替代触发器来完成,在替代触发器中,可以对视图中包含的多个数据表进行更新操作;
- 当需要对发生的DDL操作进行触发时,可以采用DDL触发器。DDL触发器可以针对一个用户或整个数据库,如果针对数据库级应该具备管理员权限;
-
每一个触发器只能编写最多32KB 的代码,当程序复杂时,可通过过程或函数进行功能切割;
-
触发器简介
-
触发器类似于过程和函数;
- 例:当对某一张表执行更新操作(insert,update,delete)时,都可能引发触发器执行;
- 触发器依靠事件执行;
- 采用隐式调用,不能接收参数
-
-
基本语法与分类
- Oracle中的触发器分类:DML,instead-of(替代),DDL,系统或数据库事件触发器
- 所有触发器都支持的基本创建语法:
CREATE [OR REPLACE] TRIGGER 触发器名称 | 语法作用: [INSTEAD OF]:替代触发器,对于视图操作所定义的触发器类型; [INSERT | UPDATE |UPDATE OF 列名称 [,列名称,...]|DELETE]:触发的事件,可以是数据表的增加,修改,删除,或者部分字段的更新; [FOLLOWS 触发器名称]:配置多个触发器执行的先后顺序; [DISABLE]:触发器建立之后默认是启用状态,通过此选项,可将其定义为禁用状态; [WHEN 触发条件]:当满足指定条件时才执行触发器操作; [PRAGMA AUTONOMOUS_TRANSACTION;]:自治事务声明,编写此语句后会在触发器中启动一个子事务处理,并且可以使用COMMIT提交事务; BEGIN:程序主体部分; END:触发器结束标记; /:完结标记 |
-
触发器注意事项
- 触发器不接受任何参数,且只能是在产生了某一个触发事件之后才会自动调用;
- 对于一张数据表的触发器,最多只有12个,同一种类型的触发器,只能定义一次;
- 一个触发器最大为32KB,所以如果需要编写的代码较多,可以通过过程或函数调用来完成;
- 默认情况下,触发器中不能使用事务处理操作,或采用自治事务进行处理;
- 在一张数据表中,定义过多的触发器,会造成DML性能下降;
- 触发器相关权限
CREATE ANY TRIGGER | 为任意用户创建触发器的权限 |
ALTER ANY TRIGGER | 修改任意触发器的权限 |
DROP ANY TRIGGER | 删除任意触发器的权限 |