Проблема:
У 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;
Создайте триггер (BB_REQFILL_TRG), чтобы он срабатывал при вводе полученной даты в таблицу BB_PRODUCT_REQUEST.Этот триггер должен изменить столбец STOCK в таблице BB_PRODUCT, чтобы отразить увеличенный запас.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;