-1

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

1 回答 1

0

你误用了触发器。我的意思是使用了错误的触发器。

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

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

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

解决方案: -- 使用 before 而不是 after

CREATE OR REPLACE TRIGGER SERVICE_CHECKih
BEFORE INSERT OR UPDATE ON SERVICEih
于 2013-11-22T13:38:52.080 回答