【发布时间】:2015-01-14 11:56:01
【问题描述】:
我应该编写一个触发器来更新我的一个表中的属性。更详细: 我有一个带有属性“orderID、customerID、date、value”的“订单”表和一个带有属性“orderID、articleID、数量”的“订单项”表。 订单中的“价值”是订单的综合价值,即每个订单商品的(价格*数量)之和。 触发器现在应该在我更新、插入或删除“订单项”中的任何内容时保持属性“值”的更新。 “INSERT”和“DELETE”的触发器主体如下所示:
IF INSERTING THEN
UPDATE Orders
SET value = value + (SELECT (:NEW.quantity* articles.price)
FROM articles
WHERE articles.articleID = :NEW.articleID)
WHERE Orders.OrderID= :NEW.OrderID;
END IF;
IF DELETING THEN
UPDATE Orders
SET value = value - (SELECT (:OLD.quantity * articles.price)
FROM articles
WHERE articles.articleID = :OLD.articleID)
WHERE Orders.OrderID= :OLD.OrderID;
END IF;
现在我们剩下了 UPDATING 案例。这是我的问题:当插入一个新的订单项目时,价值当然会增加,所以我可以像上面一样将新价值添加到旧的价值。 DELETING 也一样:我可以减去已删除行的值。但是对于更新,它变得棘手:根据 UPDATE 语句是增加还是减少数量,更改文章 ID 意味着价格增加或减少,或者两者都进行,价值会增加或减少。到目前为止,我的方法是使用许多不同的“IF”子句来处理这个问题(IF :OLD.quantity
【问题讨论】: