我有2個表(1)product_warehouse
和(2)Return_Vendor Invoice
。 我必須更新中的quantity
通過觸發根據Return_Vendor Invoice
表的值。 其中Item_code
是兩個表中的唯一鍵。如何在pl中創建更新觸發器查詢sql
例如,如果product_warehouse包含3個數量,並且店主將1個數量返回給供應商,那麼它應該是Product_warehouse
中的2。更新查詢也可以接受。
我有2個表(1)product_warehouse
和(2)Return_Vendor Invoice
。 我必須更新中的quantity
通過觸發根據Return_Vendor Invoice
表的值。 其中Item_code
是兩個表中的唯一鍵。如何在pl中創建更新觸發器查詢sql
例如,如果product_warehouse包含3個數量,並且店主將1個數量返回給供應商,那麼它應該是Product_warehouse
中的2。更新查詢也可以接受。
create or replace
TRIGGER "WR_RETURN_INVOICE_UPDATE_TRG"
AFTER UPDATE ON RETURN_INVOICE
FOR EACH ROW
BEGIN
UPDATE PRODUCT_WAREHOUSE
SET QUANTITY=QUANTITY-:OLD.QUANTITY
WHERE ITEM_CODE=:OLD.ITEM_CODE;
END WR_RETURN_INVOICE_UPDATE_TRG;
Try this one it will works.
create or replace trigger tiuda_return_vendor after insert or update or delete
on return_vendor is
begin
update product_wherehouse
set
quantity = quantity - (:new.quantity - nvl(:old.quantity, 0)
where
item_code = nvl(:new.item_code, :old.item_code);
end;
該觸發器在大多數情況下工作。您可以插入更新或刪除退貨行。
唯一的問題是:更新時,您無法更新item_code本身,因爲update語句沒有考慮到這一點。你可以很容易地解決這個問題,但我不知道它是否符合你的要求。我通常不會更改這樣的值,而是刪除該項目併爲其他項目添加一個新行。
更新數量正常。如果更新數量,則計算新舊之間的差異,並使用該差異修改wherehouse中的庫存數量。
解決方案必須使用觸發器嗎?有關於使用觸發器來讀取正在更新的表的規則。 – GregJarm
是的解決方案是通過使用觸發器。 – Sherafgan