BEFORE UPDATE TRIGGER会导致MUTATING TABLE Oracle错误吗?

时间:2014-09-15 15:39:20

标签: oracle triggers

请假设您在Oracle数据库中有BEFORE UPDATE TRIGGER

如果仅在特定列中为某个列分配了某个值(例如,字符串'SUBSTITUTE''作为ALPHA列中的更新插入),则触发,否则它不会触发。

此触发器执行许多查询,并在某些条件下更新触发表的某些记录。

成为BEFORE UPDATE TRIGGER,是否会导致MUTATING TABLE错误?

您可以假设触发器的主体不会更新ALPHA列,但可以使用:OLD值更新其他列和/或在同一个表中插入新记录。

ALPHA列更新为字符串值'SUBSTITUTE'会引发触发器触发。

1 个答案:

答案 0 :(得分:1)

A mutating table is a table that is currently being modified by an update, delete, or insert statement。如果更新前的每行触发器尝试修改定义的表,则会出现ORA-04091: table X is mutating, trigger/function may not see it错误。 Here's a SQL Fiddle with a trivial example

根据您正在做的事情,您获得相同的with an after-update trigger;如果您需要根据:new.alpha值执行操作,则无法使其成为语句级别。

&#39>做了很多查询'部分和更新表明,触发器可能不是正确的工具;这是非常模糊的,正确的工具取决于你正在做什么。例如,执行所有必要更改而不是简单更新的过程可能是一种解决方案。