《数据库系统原理》实验报告

内容发布更新时间 : 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;

>>展开全文<<
12@gma联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4 ceshi