Oracle触发器使用(三):设计规范和禁用启用
触发器设计规范
-
触发器可以用来确保每当特定事件发生时,所有必要的操作都已经执行(比如重要表数据被更新时,相关的日志已记录)。
-
不要创建与数据库已有功能重复的触发器(比如表字段的NOT NULL约束)。
-
不要创建依赖于SQL语句处理行数据的顺序的触发器。例如,如果全局包变量的当前值取决于行级触发器正在处理的行,那么不要在行级触发器中为该全局包变量赋值。如果一个触发器会更新全局包变量,那么要在BEFORE语句触发器中对这些变量进行初始化。
-
使用行级别的BEFORE触发器在将行数据写入磁盘之前对行进行修改。
-
使用行级别的AFTER触发器获取要使用的
ROW_ID
。AFTER触发器比BEFORE触发器更高效一些,因为此时数据块是只读的。 -
如果行级别的BEFORE触发器的触发事件语句是一条与正在运行的UPDATE语句冲突的UPDATE或DELETE语句,那么数据库会透明地回滚到保存点(SAVEPOINT),并重新启动触发事件语句。在触发语句成功结束之前,数据库可能会多次执行此回滚操作。每次数据库重新启动触发语句时,触发器都会被激活。
回滚到保存点不会撤销对触发器引用的包变量所做的更改。为确保每次重新启动触发语句时不会产生不必要的副作用,要保