【发布时间】:2015-07-07 00:37:04
【问题描述】:
无法解决仅发送一封邮件而不是发送两封邮件的问题。
我有两个表格,其中包含报告状态和有关日志的信息。 在第一个表中,我输入了这样的触发条件:
create or replace TRIGGER test1
conditions
begin
send email
end.
在第二张表上,我创建了一个类似的触发器 test2。
我的目标不是发送 2 封电子邮件,而是仅发送 1 封电子邮件,即使 test1 触发器和 test2 触发器的条件都存在于数据库中。
所以我看的是这样的:Execute procedure in a trigger
但不知道如何让程序二检查两个触发器是否运行。
有没有其他方法可以解决这个问题?
【问题讨论】:
-
嗨,欢迎来到 Stackoverflow。您能否分享您的代码,以便更轻松地为您提供帮助。
-
不确定您的电子邮件是如何发送的,但如果它正在调用其他一些 STMP 或外部进程,那么直接从触发器执行此操作可能会出现问题。如果 DML 回滚了怎么办?如果电子邮件发送过程不是交易的一部分,那么您不能“撤消”它。您可以创建一个工作请求表并让触发器写入该表,然后让进程或 Oracle AQ 读取该表并发送电子邮件。
-
您的 2 个表会在同一个事务中更新吗?如果不是第一个不知道它不应该立即发送电子邮件。您在触发器中检查的条件是什么?
-
简而言之,我可以肯定的是,您想要的东西无法可靠而理智地实现。不同表中的触发器在不同时间触发。除非第二个触发器的主体也检查第一个触发器的条件,并且只有在它自己的条件满足而另一个不满足的情况下才发送电子邮件,……但是哎呀,我的脑痛。这两种情况都不会经常触发,不是吗(每天不超过几次,最好每周几乎为零次),所以双邮件不会受到伤害。