【发布时间】:2013-03-17 13:17:47
【问题描述】:
我想在向表中插入数据之前禁用表上的特定触发器,但不会影响其他用户,这些用户可能正在更改同一个表中的数据。我找不到任何记录在案的方法来做到这一点。这是 Oracle 11g。
我能想到的最佳解决方案是创建一个会话变量,并让我的应用程序将其设置为触发器在工作之前检查的某个值。
强制性的反触发评论:我讨厌触发。
【问题讨论】:
-
:我不认为,您可以禁用特定会话的触发器,您可以做什么,更改触发器代码,并为其他会话执行。放置一个 if 条件`userenv('SESSIONID ') `
-
+1 讨厌触发器
-
@DavidAldridge - 抱歉你讨厌触发器。它们有自己的位置并且非常有用 - 但如果滥用,它们可能会导致维护噩梦。 (不要问我是怎么知道的 :-)。
-
如果您发现有必要针对某些特定条件禁用触发器,我建议您寻找重构相关代码的好机会。
-
@BobJarvis 作为应用程序业务逻辑的一部分,我认为触发器很糟糕。但是,对于应用程序外的日志记录和监控,它们非常棒。但当然,人们使用它们的目的是前者,我想主要是因为他们有一项大学作业,需要将它们用作业务逻辑的一部分,或者更糟糕的是强制执行约束。他们的任务不包括事后调试。