内容发布更新时间 : 2025/6/23 1:54:20星期一 下面是文章的全部内容请认真阅读。
DECLARE
L_valuediff REAL BEGIN
L_valuediff=NEW.extendedprice*(1-NEW.discount)*(1+NEW.tax); /*增加订单明细项后,计算订单含税折扣价总价的修正值*/ UPDATE Orders SET totalprice=totalprice+L_valuediff /*更新订单的含税折扣价总价*/ WHERE orderkey=NEW.orderkey; END;
(3)在Lineitem表上定义一个DELETE触发器,当删除一项订单明细时,自动修改订单Orders的TotalPrice,以保持数据一致性。
CREATE OR REPLACE TRIGGER TRI_Lineitem_Price_DELETE AFTER DELETE ON Lineitem FOR EACH ROW AS
DECLARE
L_valuediff REAL; BEGIN
L_valuediff=-OLD.extendedprice*(1-OLD.discount)*(1+OLD.tax); /*删除订单明细项后,计算订单含税折扣价总家的修正值*/ UPDATE Orders SET totalprice=totalprice+L_valuediff /*更新订单的含税折扣价总价*/ WHERE orderkey=NEW.orderkey; END;
(4)验证触发器TRI_Lineitem_Price_UPDATE。 /*查看1854号订单的含税折扣价总价totalprice*/ SELECT totalprice FROM Orders
WHERE orderkey=1854;
/*激活触发器,修改1854号订单第一个明细项的税率,该税率增加0.5%*/ UPDATE Lineitem SET tax=tax+0.005
WHERE orderkey=1854 AND linenumber=1;
/*再次查看1854号订单的含税折扣总价totalprice是否有变化,如有变化,则是触发器起作用了,否则触发器没有起作用*/ SELECT totalprice FROM Orders
WHERE orderkey=1854;
2.BEFORE触发器
(1)在Lineitem表上定义一个BEFORE_UPDATE触发器,当修改订单明细中的数量(quality)时,先检查供应表PartSupp中的可用数量availqty是否足够. CREAT ORREPLACE TRIGGER TRI_Lineitem_Quality_UPDATE BEFORE UPDATE OF quality ON Lineitem FOR EACH ROW AS
DECLARE
L_valuediff INSERT; L_availqty INSERT; BEGIN
/*计算订单明细项修改时,订购数量的变化值*/ L_valuediff=NEW.quantity-OLD.quantity;
/*查询当前订单明细项对应零件供应记录中的可用数量*/ SELECT availqty INTO L_availqty FROM PartSupp
WHERE partkey=NEW.partkey AND suppkey=NEW.suppkey;