2

关于复合触发器的使用,我有一个非常简短的问题。

我对数据库/sql/oracle 非常陌生,并且有一个 uni 任务,我必须为以下内容创建触发器:

  1. 销售人员创建订单时插入日志表
  2. 订单准备好发货时更新订单表(加上插入日志)
  3. 在星期五下午 5 点到星期一上午 9 点之后防止插入、更新、删除。

我已经成功实现了触发器,但刚刚意识到 11g 中的复合触发器。考虑将上述内容组合成一个复合触发器是否合适?这是他们的目的还是我错过了重点?

非常感谢您查看这个相当模糊的问题。

4

2 回答 2

3

IMO 这不合适。复合触发器允许您为给定表上的给定操作捕获四个不同的触发点(语句前、操作前、操作后和语句后),但看起来像 A)您在多个表上触发,并且B)您不需要服务所有不同的触发点。(顺便说一句,我在这里使用的“动作”可能意味着不同的语句类型,例如,在插入之前,更新,删除......)。

复合触发器为解决不受欢迎的 ORA-04091 MUTATING TABLE 错误提供了一种很好、干净且紧凑的方法,但在大多数情况下,我认为它们作为通用的万能替代品没有必要或有用“正常”触发器。例如,请参阅我对这个问题的回答。

分享和享受。

于 2012-05-15T16:20:39.527 回答
1

哇 - 复合触发器 - 甚至不知道它们存在......

我迅速查阅了文档

使用复合触发器的主要原因解释如下:

复合触发器使您可以更轻松地对一种方法进行编程,在该方法中,您希望为各个时间点实施的操作以共享公共数据。要使用简单的触发器实现相同的效果,您必须使用辅助包对公共状态进行建模。当触发语句导致错误并且语句后触发器没有触发时,这种方法既编程繁琐,又容易发生内存泄漏。

因此,除非您需要包变量来实现您的功能,否则没有理由使用它们。而且您的代码将不再与 10g 兼容。

于 2012-05-15T16:13:57.510 回答