Обновление информации о запасах при заполнении заявки на продукт - PullRequest
0 голосов
/ 16 апреля 2019

Проблема:

У 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...