填写产品请求时更新库存信息

时间:2019-04-15 23:51:52

标签: sql oracle plsql triggers

问题:

Brewbean's有一个BB_PRODUCT_REQUEST表,可通过触发器自动插入补充库存水平的请求。在库存水平降至再订购水平以下之后,此触发器将触发并在表中输入请求。此过程效果很好;但是,当店员通过更新表的DTRECD和COST列来记录产品请求已满足时,他们希望更新产品表中的库存水平。使用以下步骤作为准则,创建一个名为BB_REQFILL_TRG的触发器来处理此任务: 1.在SQL Developer中,运行以下INSERT语句创建可在此分配中使用的产品请求:

INSERT INTO bb_product_request (idRequest, idProduct, dtRequest, qty) VALUES (3, 5, SYSDATE, 45); COMMIT;
  1. 创建触发器(BB_REQFILL_TRG),以便在BB_PRODUCT_REQUEST表中输入接收日期时触发。此触发器需要修改BB_PRODUCT表中的STOCK列以反映增加的库存。 3.现在测试触发器。首先,查询产品5的库存并重新订购数据。更新接收日期后,旧库存的价值将变为新库存的86。我不确定触发器在做什么。

代码:

    CREATE OR REPLACE TRIGGER BB_REQFILL_TRG 
AFTER UPDATE OF DTRECD ON BB_PRODUCT_REQUEST
for EACH ROW

declare
    cursor c_product is
        select stock, reorder
        from bb_product
        where idproduct = :OLD.idproduct;

    v_dtrecd DATE := sysdate;

--    cursor c_dtrecd is

BEGIN
    select dtrecd
        into v_dtrecd
    from bb_product_request
    where idrequest = :OLD.idrequest;

    for x in c_product loop
        if v_dtrecd = :new.dtrecd then
            update bb_product
            set stock = x.stock + x.reorder
            where idproduct = :old.idproduct;
        end if;
    end loop;
END;
    update bb_product_request -- new value when updated (86) from the trigger    set DTRECD = sysdate, cost = 225
    where idrequest = 3;

    select stock, reorder -- stock (41), reorder (45)
    from bb_product
    where idproduct = 5;

    select * -- this verifies that dtrecd is updated as well
    from bb_product_request
    where idproduct = 5;

0 个答案:

没有答案