我有3张表(库存、订单主控、订单明细)。在表Inventory中,我有ID_PRODUCT和QUANTITY_INSTORTS。在表OrderMaster中,我有ID_ORDER和ID_STATE_OF_ORDER(所有行在开始时都是3)。最后但并非最不重要的是,在表OrderDetail中,我有ID_ORDER、ID_PRODUCT和QUANTITY_ORDERED。
我需要一个触发器,当OrderMaster中的ID_STATE_OF_ORDER更改为1时,表Inventory中的Quanity_Inventory将是当前金额减去QUANTY_ORDERED
我目前的触发器是这样的
create or replace trigger Inventory_switch
AFTER UPDATE on OrderMaster
Begin
UPDATE Inventory
SET quantity_inventory =
(SELECT Inventory.quantity_inventory - OrderDetail.quantity_ordered
FROM Inventory, OrderDetail, OrderMaster
WHERE Inventory.ID_PRODUCT = OrderDetail.ID_PRODUCT AND
OrderMaster.ID_ORDER = OrderDetail.ID_ORDER AND
OrderMaster.ID_STATE_OF_ORDER = 1);
End;
此代码更新库存中的所有行,而不考虑我输入的条件。
拜托了,我会感激任何帮助的。先谢谢你。
1条答案
按热度按时间ulmd4ohb1#
既然是甲骨文,那么:
FOR EACH ROW
子句(这样您就可以更新与其值已更新的id_order
相关的行:new
伪记录when
子句,以便在订单状态不为1时不会更新任何内容exists
子句,这样您就不会更新整个表,而只更新受影响的行大概是这样的: