О том, как создать в Oracle Express - SQL.Триггер для обновления столбца - PullRequest
0 голосов
/ 31 декабря 2018

У меня есть таблица product и таблица sales.Внутри product у меня есть (product_id, p_desc, qty_stock), а в таблице sales у меня есть (sale_id, producto_id, sale_p_qty), где sale_p_qty - это количество, которое покупатель покупает у определенного продукта.

Вопрос заключается в том, как создать триггер для обновления значения столбца qty_stock в таблице product (это значение будет запасом)?Я не могу сделать это.Я могу сделать триггер, который уменьшается, но только одно значение за раз.Правильнее было бы получить sale_p_qty таблицы sales и уменьшить на qty_stock, но я не могу этого сделать.Не могли бы вы мне помочь?

Моя попытка на этом остановилась (я не делал процедуру, я не знаю, нужно ли вам в этом случае):

CREATE OR REPLACE TRIGGER trg_stock_ai AFTER INSERT OR UPDATE ON sale
FOR EACH ROW
declare
    new_stock NUMBER (4);
    --SELECT sale_p_qty INTO new_stock FROM sale
    --SET new_stock = (SELECT sale_p_qty FROM sale);
BEGIN
    SELECT sale_p_qty INTO new_stock FROM sale;
    UPDATE product
    SET qty_stock = qty_stock - new_stock
    WHERE product.product_id =: NEW.product_id;
END;

1 Ответ

0 голосов
/ 31 декабря 2018

Вы можете сделать это в два этапа:

CREATE OR REPLACE TRIGGER trg_stock_ai AFTER INSERT OR UPDATE ON sale
FOR EACH ROW
BEGIN
    UPDATE product
        SET qty_stock = (qty_stock - :NEW.sale_p_qty)
        WHERE p.product_id = :NEW.product_id;

    UPDATE product
        SET qty_stock = (qty_stock + :OLD.sale_p_qty)
        WHERE p.product_id = :OLD.product_id;
END;

Это должно работать как для вставок, так и для обновлений, даже если product_id изменяется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...