实验九 游标与存储过程
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验九游标与存储过程
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 for
select*
from Customer
select @text='=========================Customer 表的记录
========================='
print @text
select @text='客户编号'+'-----'+'客户名称'+'----'+'客户住址'+'-----'+'客户电话'+'------'+'邮政编码'
print @text
select
@text='============================================================ ============================'
print @text
opencus_cur
fetchcus_cur into @C_no,@C_name,@C_phone,@C_add,@C_zip
while(@@fetch_status=0)
begin
select @text=@cust_No+' '+@cust_name+' '+@addr+' '+@tel_no+'
'+@zip
print @text
fetchcus_cur into @C_no,@C_name,@C_phone,@C_add,@C_zip
end
closecus_cur
deallocatecus_cur
'客户编号'+'-----'+'客户名称'+'----'+'客户住址'+'-----'+'客户电话'+'------'+'邮政编码'
(2)利用游标修改OrderMaster表中orderSum的值。
declare @No char(12),@total numeric(9,2)
declare cur_OrderMaster scroll cursorfor
select orderNo,sum(price*quantity)
from OrderDetail
groupby orderNo
open cur_OrderMaster
fetch cur_OrderMaster into @No,@total
while(@@fetch_status=0)
begin
update OrderMaster set orderSum=@total
where orderNo=@No
fetch cur_OrderMaster into @No,@total
end
close cur_OrderMaster
deallocate cur_OrderMaster
(3)创建游标,要求:输出所有女业务员的编号、姓名、性别、所属部门、职务、薪水。declare @emp_No char(8),@emp_Name char(10),@emp_sex char(1),@dept char(30),@headShip char(10),@salary int
declare mycur cursor for
select employeeNo,employeeName,sex,department,headShip,salary
From Employee
where sex='f'
Order by employeeNo
open mycur
fetch mycur into
@emp_No,@emp_Name,@emp_sex,@dept,@headShip,@salary
while(@@fetch_status=0)
begin
select @emp_No,@emp_Name,@emp_sex,@dept,@headShip,@salary
fetch mycur into
@emp_No,@emp_Name,@emp_sex,@dept,@headShip,@salary
end
close mycur
deallocate mycur
(4)创建存储过程,要求:按表定义中的CHECK约束自动产生员工编号。
(5)创建存储过程,要求:查找姓“李”的职员的员工编号、订单编号、订单金额。
createprocedure emp_Name @E_Name varchar(10)
AS
select a.employeeNo,b.orderNo,b.ordersum
from Employee a,OrderMaster b
where a.employeeNo=b.salerNo and a.employeeName like @E_Name
exec emp_Name @E_Name='李%'
(6)创建存储过程,要求:统计每个业务员的总销售业绩,显示业绩最好的前3位业务
员的销售信息。
(7)创建存储过程,要求将大客户(销售数量位于前5名的客户)中热销的前3种商品的销
售信息按如下格式输出:
=======大客户中热销的前3种商品的销售信息================
商品编号商品名称总销售数量
P2******* 120GB硬盘 21.00
P2******* 3.5寸软驱 18.00
P2******* 网卡 16.00
(8)创建存储过程,要求:输入年度,计算每个业务员的年终奖金。年终奖金=年销售
总额×提成率。提成率规则如下:年销售总额5000元以下部分,提成率为10%,对于5000
元及超过5000元部分,则提成率为15%。
(9)创建存储过程,要求将OrderMaster表中每一个订单所对应的明细数据信息按规定格
式输出,格式如图7-1所示。
===================订单及其明细数据信息====================
--------------------------------------------------- 订单编号 200801090001
--------------------------------------------------- 商品编号数量价格
P2******* 5 403.50
P2******* 3 2100.00
P2******* 2 600.00
--------------------------------------------------- 合计订单总金额 3103.50
图7-1 订单及其明细数据信息
(10)请使用游标和循环语句创建存储过程proSearchCustomer,根据客户编号查找该客户的名
称、住址、总订单金额以及所有与该客户有关的商品销售信息,并按商品分组输出。输出格
式如图7-2所示。
===================客户订单表====================
---------------------------------------------------