《数据库原理》实验报告(三)实验名称数据库编程姓名学号班级实验目的(1)了解存储过程、函数和触发器的作用;(2)熟悉使用命令创建存储过程的方法;(3)熟悉使用命令创建函数的方法;(4)熟悉使用命令创建触发器的方法。实验内容(1)创建一个函数,以工程号为参数,返回该工程所在的城市,如果没有该工程,返回“无此工程”。createfunctionret_city(@jnochar(2))returnschar(20)asbegindeclare@citychar(20);ifnotexists(select*fromjwherejno=@jno)set@city='无此工程';elseselect@city=cityfromjwherejno=@jno;return@city;end(2)创建一个函数,以供应商号为参数,返回该供应商供应零件的总数量。如果不存在该供应商,则返回-100。createfunctionret_sl(@snochar(2))returnsintasbegindeclare@total_qtyint;成绩ifnotexists(select*fromswheresno=@sno)set@total_qty=-100;elseselect@total_qty=sum(qty)fromspjwheresno=@sno;return@total_qty;end(3)创建一个存储过程,以供应商号、工程号、零件号、供应量为参数,在SPJ表中插入一条记录,如果该记录已存在,显示“记录已存在!”,否则显示“插入成功!”。CreatePROCEDUREinsert_1@snochar(2),@pnochar(2),@jnochar(2),@qtyintASbeginifexists(select*fromspjwheresno=@snoandpno=@pnoandjno=@jnoandqty=@qty)Print‘记录已存在!’;elsebegininsertintospjvalues(@sno,@pno,@jno,@qty);print'插入成功!'endend(4)创建一个存储过程,以供应商号、工程号、零件号、供应量(新)为参数,修改SPJ表中某供应商给某工程供应某零件的供应量为新供应量,如果不存在该记录,则显示“无此记录!”,否则显示“修改成功!”。CreatePROCEDUREupdate_1@snochar(2),@pnochar(2),@jnochar(2),@qtyintASbeginifnotexists(select*fromspjwheresno=@snoandpno=@pnoandjno=@jno)Print‘无此记录!’;elsebeginupdatespjsetqty=@qtywheresno=@snoandpno=@pnoandjno=@jno;print'修改成功!'endend(5)创建一个存储过程,以工程号为参数,删除J表及SPJ表中相应的记录,如果不存在该工程,显示“无此工程!”;如果该工程没有零件供应记录,显示“该工程没有供应记录,J表中记录已删除!”;如果该工程有零件供应记录,显示“已删除J表及SPJ表中的记录!”。CreatePROCEDUREdelete_1@jnochar(2)ASbeginifnotexists(select*fromjwherejno=@jno)Print‘无此工程!’;elseifnotexists(select*fromspjwherejno=@jno)begindeletefromjwherejno=@jno;print'该工程没有供应记录,J表中记录已删除!'endelsebegindeletefromspjwherejno=@jno;deletefromjwherejno=@jno;print'已删除J表及SPJ表中的记录!'endend(6)创建入库表出库表上的六个触发器。入库修改:createtriggerupdat_rkontab_rkforupdateasbegindeclare@old_spbhintdeclare@old_rkslintdeclare@new_spbhintdeclare@new_rkslintselect@old_spbh=spbhfromdeletedselect@old_rksl=rkslfromdeletedselect@new_spbh=spbhfrominsertedselect@new_rksl=rkslfrominsertedif@old_spbh=@new_spbhand@old_rksl!=@new_rkslbeginupdatetab_kcsetkcl=kcl-@old_rksl+@new_rkslwherespbh=@new_spbh;return;endif@old_spbh!=@new_spbhbeginupdatetab_kcsetkcl=kcl-@old_rkslwherespbh=@old_spbh;ifexists(select*fromtab_kcwherespbh=@new_spbh)updatetab_kcsetkcl=kcl+@new_rkslwherespbh=@new_spbh;elseinsertintotab_kcvalues(@new_spbh,@new_rksl);endend