首页 > 解决方案 > 关于如何在 Oracle Express - SQL 中创建。更新列的触发器

问题描述

我有一张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_qtysales和减量,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;

标签: sqloracletriggers

解决方案


您可以分两步执行此操作:

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;

This should work for both inserts and updates, even when product_id changes.


推荐阅读