如何在pl sql中进行更新触发器查询

时间:2012-11-27 06:12:16

标签: sql oracle plsql oracle11g oracle-apex

我有2个表(1)product_warehouse和(2)Return_Vendor Invoice。 我必须根据quantity表的值,通过触发器更新product_warehouse中的Return_Vendor Invoice。 其中Item_code是两个表中的唯一键。

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

2 个答案:

答案 0 :(得分: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本身,因为更新语句不会考虑这一点。你可以很容易地解决这个问题,但我不知道它是否符合你的要求。我通常不会更改这样的值,而是删除该项并为其他项添加新行。

更新数量正常。如果更新数量,则计算新旧之间的差异,并使用该差异修改wherehouse中的库存数量。

答案 1 :(得分: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.