2013-11-22 265 views
-1

我想创建一个触发器来计算服务的日期和分支的ID。触发器的目标是计算分支ID的数量以及服务的日期。如果计数大于3,那么触发器应该生效。那我可是遇到的问题是,甲骨文已经确定,这是一个不同诱变触发,并且不允许有错误消息的数据插入:删除变异触发器

ORA-04091: table user1.SERVICEIH is mutating, trigger/function may not see it 
ORA-06512: at "user1.SERVICE_CHECKIH", line 5 
ORA-04088: error during execution of trigger 'user1.SERVICE_CHECKIH' 
+0

看看这个问题:http://stackoverflow.com/questions/2138363/oracle-triggers-problem -with-mutating-tables?rq = 1 –

+2

这是一个*惊人的*编辑 - 你真的认为它使问题可以回答? –

回答

0

你滥用了扳机。我的意思是用错了触发器。

  1. 插入/更新在表中的行
  2. 上表A(每行)的触发器执行上表的查询甲

甲骨文抛出ORA-04091这是一个预期的和正常的行为,Oracle希望保护你免于你自己,因为它保证每条语句都是原子的(即将失败或完全成功),并且每条语句都看到数据的一致视图

您会期望查询2)不要看到插入的行( 1)。这将是矛盾

解决方案: - 使用之前,而不是之后

CREATE OR REPLACE TRIGGER SERVICE_CHECKih 
BEFORE INSERT OR UPDATE ON SERVICEih 
+0

如果这解决了您的问题,请将其标记为正确的答案,这会更有礼貌 – SriniV