资源描述:
《SQL实验报告》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、实验四触发器实验(一)after触发器(1)在lineitem表上定义一个after触发器,当修改列项目extendedpricediscounttax时,要把orders表的totalprice一起修改,以保证数据一致性CREATETRIGGERtrig_lineitem_price_updateonlineitemforupdateasbeginif(UPDATE(extendedprice)orUPDATE(tax)orUPDATE(discount))begin--声明游标变量指向inserted表declarecursor_insertedcurs
2、orread_onlyforselectorderkey,linenumber,extendedprice,discount,taxfrominserted--声明变量获取查找信息declare@orderkeyint,@linenumberint,@extendedpricereal,@discountreal,@taxreal--打开游标opencursor_inserted--读取游标fetchnextfromcursor_insertedinto@orderkey,@linenumber,@extendedprice,@discount,@taxwh
3、ile@@FETCH_STATUS=0begin--声明一个变量保存重新计算的新价格declare@new_totalpricerealselect@new_totalprice=@extendedprice*(1-@discount)*(1+@tax)--用新的总价格变量更新orders表的totalpriceupdateorderssettotalprice=@new_totalpricewhereorderkey=@orderkeyfetchnextfromcursor_insertedinto@orderkey,@linenumber,@extend
4、edprice,@discount,@taxenddeallocatecursor_insertedendend(2)在lineitem表上定义一个after触发器,当增加一项订单明细时,自动修改orders表的totalprice,以保证数据一致性CREATETRIGGERtrig_lineitem_price_insertonlineitemforinsertasbegin--声明游标变量指向inserted表declarecursor_insertedcursorread_onlyforselectorderkey,linenumber,extende
5、dprice,discount,taxfrominserted--声明变量获取查找信息declare@orderkeyint,@linenumberint,@extendedpricereal,@discountreal,@taxreal--打开游标opencursor_inserted--读取游标fetchnextfromcursor_insertedinto@orderkey,@linenumber,@extendedprice,@discount,@taxwhile@@FETCH_STATUS=0begin--声明一个变量保存重新计算的新价格decla
6、re@new_totalpricerealselect@new_totalprice=@extendedprice*(1-@discount)*(1+@tax)--用新的总价格变量更新orders表的totalpriceupdateorderssettotalprice=totalprice+@new_totalpricewhereorderkey=@orderkeyfetchnextfromcursor_insertedinto@orderkey,@linenumber,@extendedprice,@discount,@taxenddeallocatec
7、ursor_insertedend(3)在lineitem表上定义一个after触发器,当删除一项订单明细记录时,自动修改orders表的totalprice,以保证数据一致性CREATETRIGGERtrig_lineitem_price_deleteonlineitemfordeleteASbegin--声明游标变量指向deleted表declarecursor_deletedcursorread_onlyforselectorderkey,linenumber,extendedprice,discount,taxfromdeleted--声明变量获取查
8、找信息declare@orderkeyint,@li