实验九游标与存储过程1 实验目的与要求(1) 掌握游标的定义和使用方法。
(2) 掌握存储过程的定义、执行和调用方法。
(3) 掌握游标和存储过程的综合应用方法。
2 实验内容请完成以下实验内容:(1)创建游标,逐行显示Customer表的记录,并用WHILE结构来测试@@Fetch_Status的返回值。
输出格式如下:declare @C_no char(9),@C_name char(18),@C_phone char(10),@C_addchar(8),@C_zip char(6)declare @text char(100)declarecus_cur scroll cursor forselect*from Customerselect @text='=========================Customer 表的记录========================='print @textselect @text='客户编号'+'-----'+'客户名称'+'----'+'客户住址'+'-----'+'客户电话'+'------'+'邮政编码'print @textselect@text='============================================================ ============================'print @textopencus_curfetchcus_cur into @C_no,@C_name,@C_phone,@C_add,@C_zipwhile(@@fetch_status=0)beginselect @text=@cust_No+' '+@cust_name+' '+@addr+' '+@tel_no+''+@zipprint @textfetchcus_cur into @C_no,@C_name,@C_phone,@C_add,@C_zipendclosecus_curdeallocatecus_cur'客户编号'+'-----'+'客户名称'+'----'+'客户住址'+'-----'+'客户电话'+'------'+'邮政编码'(2)利用游标修改OrderMaster表中orderSum的值。
declare @No char(12),@total numeric(9,2)declare cur_OrderMaster scroll cursorforselect orderNo,sum(price*quantity)from OrderDetailgroupby orderNoopen cur_OrderMasterfetch cur_OrderMaster into @No,@totalwhile(@@fetch_status=0)beginupdate OrderMaster set orderSum=@totalwhere orderNo=@Nofetch cur_OrderMaster into @No,@totalendclose cur_OrderMasterdeallocate cur_OrderMaster(3)创建游标,要求:输出所有女业务员的编号、姓名、性别、所属部门、职务、薪水。
declare @emp_No char(8),@emp_Name char(10),@emp_sex char(1),@dept char(30),@headShip char(10),@salary intdeclare mycur cursor forselect employeeNo,employeeName,sex,department,headShip,salaryFrom Employeewhere sex='f'Order by employeeNoopen mycurfetch mycur into@emp_No,@emp_Name,@emp_sex,@dept,@headShip,@salarywhile(@@fetch_status=0)beginselect @emp_No,@emp_Name,@emp_sex,@dept,@headShip,@salaryfetch mycur into@emp_No,@emp_Name,@emp_sex,@dept,@headShip,@salaryendclose mycurdeallocate mycur(4)创建存储过程,要求:按表定义中的CHECK约束自动产生员工编号。
(5)创建存储过程,要求:查找姓“李”的职员的员工编号、订单编号、订单金额。
createprocedure emp_Name @E_Name varchar(10)ASselect a.employeeNo,b.orderNo,b.ordersumfrom Employee a,OrderMaster bwhere a.employeeNo=b.salerNo and a.employeeName like @E_Nameexec emp_Name @E_Name='李%'(6)创建存储过程,要求:统计每个业务员的总销售业绩,显示业绩最好的前3位业务员的销售信息。
(7)创建存储过程,要求将大客户(销售数量位于前5名的客户)中热销的前3种商品的销售信息按如下格式输出:=======大客户中热销的前3种商品的销售信息================商品编号商品名称总销售数量P2******* 120GB硬盘 21.00P2******* 3.5寸软驱 18.00P2******* 网卡 16.00(8)创建存储过程,要求:输入年度,计算每个业务员的年终奖金。
年终奖金=年销售总额×提成率。
提成率规则如下:年销售总额5000元以下部分,提成率为10%,对于5000元及超过5000元部分,则提成率为15%。
(9)创建存储过程,要求将OrderMaster表中每一个订单所对应的明细数据信息按规定格式输出,格式如图7-1所示。
===================订单及其明细数据信息====================--------------------------------------------------- 订单编号 200801090001--------------------------------------------------- 商品编号数量价格P2******* 5 403.50P2******* 3 2100.00P2******* 2 600.00--------------------------------------------------- 合计订单总金额 3103.50图7-1 订单及其明细数据信息(10)请使用游标和循环语句创建存储过程proSearchCustomer,根据客户编号查找该客户的名称、住址、总订单金额以及所有与该客户有关的商品销售信息,并按商品分组输出。
输出格式如图7-2所示。
===================客户订单表====================---------------------------------------------------客户名称:统一股份有限公司客户地址:天津市总金额: 31121.86--------------------------------------------------- 商品编号总数量平均价格P2******* 5 80.70P2******* 19 521.05P2******* 5 282.00P2******* 2 320.00报表制作人陈辉制作日期 06 8 2012图7-2 客户订单表declare @emNovachar(8),@emName char(8),@emse char(1),@emdevachar(10),@emhevachar(8),@emsa numeric(8,2)declare @text char(100)declareem_curscollcusor forselectemployeeNo,employeeName,sex,department,heatShip,salaryfrom Employeewhere sex='M'select @text='=========================================================='print @textselect @text='编号姓名性别所属部门职务薪水'print @textselect @text='=========================================================='openem_curfetchem_cur into @emNo,@emNa,@emse,@emde,@emsewhile(@ @fetch_satus=0)beginselect @text=@emNo+' '+@emNa+' '+@emse+' '+@emde+' '+@emhe+''+convent(charaaa(10),@emsa)print @textfetchem_cur into @emNo,@emNa,@emse,@emde,@emhe,@emsaendcloseem_curdeallocateem_cur。