问题:
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;
代码:
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;