Oracle11g开始提供了一个触发器顺序控制的功能,对于同时触发的多个触发器,可以用FOLLOWS语句来控制先后执行顺序。
但是FOLLOWS语法有一定的限制:只能用在同类型的多个触发器上
(before、after要一样;update、insert、delete要一样;行级、语句级要一样)
否则会报错ORA-25022: cannot reference a trigger of a different type
既然同一类型才能控制,绝大部分场景是不需要分2个触发器的,直接在触发器内部对语句按序执行就可以了。
我在开发过程中也没有遇到非要使用follows的应用场景,但作为一个功能,记录一下,说不定以后会碰到。
在表T_OBJECTS上加2个before update of触发器,分别对OBJECT_NAME和LAST_DDL_TIME列的update操作进行触发。
执行一个update语句,同时修改OBJECT_NAME和LAST_DDL_TIME列
发现最终结果是TRIGGER1的操作结果,说明先执行了TRIGGER2,再执行TRIGGER1。
修改一下触发顺序,让TRIGGER2在TRIGGER1之后执行:
再重新执行刚才的update语句看下结果
果然保留下来了trigger2的数据

本文介绍了Oracle11g中通过FOLLOWS语句控制触发器执行顺序的功能,强调了FOLLOWS只能用于同类型的触发器,并举例说明了如何设置触发器顺序以及实际应用效果。
2568

被折叠的 条评论
为什么被折叠?



