我只是对复合触发器的使用提出了一个非常快速的问题。
我是数据库/ sql / oracle的新手,并且有一个uni任务,我必须为以下内容创建触发器:
我已经成功实现了触发器,但刚刚意识到11g中的复合触发器。考虑将上述内容组合成一个复合触发器是否合适?这是他们的意思,还是我错过了这一点?
非常感谢您查看这个相当含糊的问题。
答案 0 :(得分:3)
IMO不合适。对于给定表上的给定操作,复合触发器允许您捕获四个不同的触发点(在语句之前,在操作之前,在操作之后和在语句之后),但它看起来像A)您在多个表上触发,并且B)您无需为所有不同的触发点提供服务。 (顺便说一句,我在这里使用它的“动作”可能意味着不同的语句类型,例如,BEFORE INSERT,UPDATE,DELETE ......)。
复合触发器使得一种漂亮,干净,紧凑的方法可以解决从未流行的ORA-04091 MUTATING TABLE错误,但在大多数情况下,我发现它们不是必需的或有用的通用的 - 所有替换“正常”触发器。有关示例,请参阅我对this question的回答。
分享并享受。
答案 1 :(得分:1)
我很快抬起头来the documentation
使用复合触发器的主要原因解释如下:
复合触发器可以更轻松地为您编写方法 想要为各个时间点分享实施的行动 共同数据。要通过简单的触发器实现相同的效果,您就拥有了 用辅助包来模拟公共状态。这种方法是 编程既麻烦又容易出现内存泄漏 触发语句导致错误和后语句触发器 没发射。
因此,除非您需要包变量来实现您的功能,否则没有理由使用它们。而你的代码将不再兼容10g。