触发器设计原则¶
当要确定某事件发生时,是否需要执行动作(不管是用户或是应用程序响应触发器语句)。
不要创建和数据库特性重复的触发器。
不要创建基于SQL语句对行的处理顺序的触发器。
使用BEFORE行触发器在将数据写入磁盘之前修改行。
使用AFTER行触发器获取行ID号并在操作中使用它。
如果BEFORE语句触发器的触发语句是和正在运行的UPDATE语句相冲突的UPDATE或者DELETE语句,数据库将执行回滚ROLLBACK到保存点SAVEPOINT的转换,并重新启动触发器语句。在被编译成功之前,数据库可以重复此操作多次。每次重启触发器语句,触发器都将被激活。ROLLBACK到SAVEPOINT的转换并不会破坏触发器所引用的包变量。可以通过在包中定义计数器用以检测此状态。
不要创建递归触发器。
如果创建含有访问远程数据库语句的触发器,那么将此语句异常的处理语句放到一个存储的子程序中并在此触发器中调用。
谨慎的运用DATABASE触发器。任一数据库用户触发该事件时,都将激活触发器。
如果触发器运行SELECT Username FROM USER_USERS语句,返回值是触发器的拥有者而不是更新表的用户。
为了使得在相同的表上拥有触发器的应用程序的模块化安装,建议创建相同类型的多个触发器而不是单个的执行一系列操作的触发器。
每个触发器都能够感应到前面的触发器所作的改变,也能感应到OLD和NEW的值。