2012-11-27 121 views
2

我有2个表(1)product_warehouse和(2)Return_Vendor Invoice。 我必须更新中的quantity通过触发根据Return_Vendor Invoice表的值。 其中Item_code是两个表中的唯一键。如何在pl中创建更新触发器查询sql

例如,如果product_warehouse包含3个数量,并且店主将1个数量返回给供应商,那么它应该是Product_warehouse中的2。更新查询也可以接受。

+0

解决方案必须使用触发器吗?有关于使用触发器来读取正在更新的表的规则。 – GregJarm

+0

是的解决方案是通过使用触发器。 – Sherafgan

回答

1
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. 
2
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中的库存数量。