我正在尝试创建一个触发器,用于计算服务的日期和分支的ID。触发器的目标是计算分支ID的数量以及服务日期。如果计数大于3,那么触发器应该生效。然而,我遇到的问题是oracle已经确定它是一个变异触发器,并且不允许使用错误消息插入数据:
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 :(得分:0)
您误用了触发器。我的意思是使用错误的触发器。
Oracle抛出ORA-04091,这是一种预期的正常行为,Oracle希望保护您自己,因为它保证每个语句都是原子的(即要么失败要么完全成功),并且每个语句都看到一致的视图数据
您希望查询(2)不会在(1)上看到插入的行。这将是矛盾的
解决方案: - 使用之前而不是之后
CREATE OR REPLACE TRIGGER SERVICE_CHECKih
BEFORE INSERT OR UPDATE ON SERVICEih