请假设您在Oracle数据库中有BEFORE UPDATE TRIGGER
。
如果仅在特定列中为某个列分配了某个值(例如,字符串'SUBSTITUTE
''作为ALPHA列中的更新插入),则触发,否则它不会触发。
此触发器执行许多查询,并在某些条件下更新触发表的某些记录。
成为BEFORE UPDATE TRIGGER
,是否会导致MUTATING TABLE
错误?
您可以假设触发器的主体不会更新ALPHA列,但可以使用:OLD
值更新其他列和/或在同一个表中插入新记录。
将ALPHA
列更新为字符串值'SUBSTITUTE'
会引发触发器触发。
答案 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>做了很多查询'部分和更新表明,触发器可能不是正确的工具;这是非常模糊的,正确的工具取决于你正在做什么。例如,执行所有必要更改而不是简单更新的过程可能是一种解决方案。