如何使用 oracle 触发器中的计算值更新同一 table 中的列
How to update a column in same table using calculated value in oracle trigger
我正在 oracle 中创建一个触发器,只要在相同 table 的列“数量”中有更新,我就需要更新列“小计”。所以我应该触发这个触发器的更新命令是:
更新 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 ?
我的假设是您只是试图更新导致触发器触发的特定行。 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
定义为 table 中的计算列比尝试将数据维护在触发器。
我正在 oracle 中创建一个触发器,只要在相同 table 的列“数量”中有更新,我就需要更新列“小计”。所以我应该触发这个触发器的更新命令是:
更新 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 ?
我的假设是您只是试图更新导致触发器触发的特定行。 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
定义为 table 中的计算列比尝试将数据维护在触发器。