更新前Oracle SQL变异表触发器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了更新前Oracle SQL变异表触发器相关的知识,希望对你有一定的参考价值。

我想为表创建更新触发器。触发器已创建,但是当我更新列finish时,它会说变异表。

这是我的代码

    CREATE OR REPLACE TRIGGER SET_COST BEFORE UPDATE OF finish ON PAY
    FOR EACH ROW

    BEGIN

    UPDATE PAY
    SET PAY.COST = (finish-start) * 20000
    WHERE PAY.ID=:new.ID;

    END;

这个触发器给了我'Mutating Table'错误,到目前为止我一直无法修复它。有什么建议吗?谢谢

答案

首先,你根本不应该这样做。存储在您需要时可以轻松计算的值是没有用的。

截至您的问题:没有更新:

begin
  :new.cost := (:new.finish - :new.start) * 20000;
end;

以上是关于更新前Oracle SQL变异表触发器的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 触发器 - 变异表的问题

Oracle触发器-变异表触发器不能访问本表

AFTER UPDATE 触发器上的变异表错误

仅在 old = new 上进行选择时获取变异表 (ORA-04091)

什么是 Oracle 中的变异表? [复制]

在行触发器中取消插入值