移除突变触发器



我正在尝试创建一个触发器,用于计算服务的日期和分支的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'

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

  1. 在表a中插入/更新一行
  2. 表a上的触发器(对于每一行)对表a执行查询

Oracle抛出了一个ORA-04091,这是一种预期的正常行为,Oracle希望保护您免受攻击,因为它保证每个语句都是原子的(即要么失败,要么完全成功),并且每个语句都能看到数据的一致视图

您希望查询(2)不会看到在(1)上插入的行。这将与相矛盾

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

CREATE OR REPLACE TRIGGER SERVICE_CHECKih
BEFORE INSERT OR UPDATE ON SERVICEih

最新更新