如何在pl sql中进行更新触发器查询
我有两个表(1)如何在pl sql中进行更新触发器查询,sql,oracle,plsql,oracle11g,oracle-apex,Sql,Oracle,Plsql,Oracle11g,Oracle Apex,我有两个表(1)产品仓库和(2)退货供应商发票。 我必须根据退货供应商发票表的值,通过触发器更新产品仓库中的数量。 其中,Item\u code是两个表中的唯一键 例如,如果产品仓库包含3个数量,而店主将1个数量返回给供应商,则产品仓库中的数量应为2个。更新查询也可以接受 create or replace trigger tiuda_return_vendor after insert or update or delete on return_vendor is begin update
产品仓库
和(2)退货供应商发票
。
我必须根据退货供应商发票
表的值,通过触发器更新产品仓库
中的数量
。
其中,Item\u code
是两个表中的唯一键
例如,如果产品仓库包含3个数量,而店主将1个数量返回给供应商,则产品仓库中的数量应为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_代码本身,因为update语句没有考虑到这一点。你可以很容易地解决这个问题,但我不知道这是否符合你的要求。我通常不会这样更改值,而是删除该项并为其他项添加新行
更新数量可以很好地工作。如果您更新数量,将计算新旧之间的差异,该差异用于修改Where House中的库存数量。解决方案必须使用触发器吗?关于使用触发器读取正在更新的表,有一些规则。是的,解决方案是使用触发器。
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.