0

我正在 oracle 中创建一个触发器,只要在同一个表的“数量”列中有更新,我就需要更新“小计”列。所以我应该触发这个触发器的更新命令是:

更新 TABLENAME 设置 QUANTITY = 6 其中 Order_ID = 601 AND ITEM_SEQ = 4 ;

这应该触发我拥有的以下触发器:

AFTER UPDATE ON TABLENAME 
FOR EACH ROW 
BEGIN 
   IF UPDATING THEN UPDATE TABLENAME
          SET SUBTOTAL =  :NEW.QUANTITY * ACTUAL_PRICE
          WHERE  order_id = :NEW.order_id;
   END IF;
END; ```

However i am getting a mutating error issue ORA-04091. I searched and found that this is generally when the table is updating and we try to insert values to it , however i used "AFTER" command and so the table should have been updated by then. 
Any help ? 
4

1 回答 1

0

我的假设是您只是试图更新导致触发器触发的特定行。这actual_price也来自被修改的行。如果是这样,您只需为:new.subtotal. 但是您必须在更新前触发器而不是更新后触发器中执行此操作。

create or replace trigger your_trigger_name
  before update on your_table_name
  for each row
begin
  :new.subtotal := :new.quantity * :new.actual_price;
end;

如果这不是家庭作业,则将其定义subtotal为表中的计算列而不是尝试在触发器中维护数据会更有效且不易出错。

于 2021-03-17T03:53:00.160 回答