实验五内容:
一、实验指导书p120(5)-(7),创建此存储过程采用2种方式,1、不用游标方式;2、用游标方式(游标使用,可参看实验指导书p124例10.2)。
二、1、创建存储过程,统计某顾客的报纸订阅总份数,以顾客号为输入参数,订阅总份数为输出参数;
2、执行存储过程,实现对某一顾客的报纸订阅总份数打印出,如输出“10000001”号顾客的订阅总份数。
‘不带游标
(1)在DingBao数据库中创建存储过程C_P_Proc,实现参数化查询顾客订阅信息,查询参数为顾客姓名,要求能查询出参数指定的顾客编号、顾客名、订阅报纸名及订阅份数等信息。
CREATE PROCEDURE C_P_Proc @name VARCHAR(8)
AS
SELECT CUSTOMER.cna,CUSTOMER.cno,PAPER.pna,CP.num
FROM PAPER,CP,CUSTOMER
WHERE cna=@name AND CUSTOMER.cno=CP.cno AND
PAPER.pno=CP.pno;
带游标
create procedure C_P_Proc2(@cname varchar(10))
as
declare @cno char(4);
declare @cna varchar(10);
declare @pna varchar(20);
declare @num int ;
--新建游标
declare db_cursor cursor
for select customer.cno,cna,pna,num
from cp,customer,paper
where cna=@cname and cp.cno=customer.cno and paper.pno=cp.pno;
--打开游标
open db_cursor
--从游标里取出数据并赋值给变量
fetch next from db_cursor into @cno,@cna,@pna,@num
begin
--判断游标的状态
-- 0 fetch语句成功
-- -1 fetch语句失败或此行不在结果集中
-- -2 被提取的行不存在
while @@FETCH_STATUS=0
begin
print(convert(varchar,@cno)+' '+convert(varchar,@cna)+' '+convert(varchar,@pna)+' '+convert(varchar,@num));
--用游标去取下一条记录
fetch next from db_cursor into @cno,@cna,@pna,@num
end
--关闭游标
close db_cursor
--撤销游标
deallocate db_cursor
END
Go
(2)执行存储过程C_P_Pro,实现对“李涛”、“钱金浩”等不同顾客的订阅信息放入查询。
Execute C_P_Proc @name='李涛'
用游标的查询
Execute C_P_Proc2 @cname='李涛'
Execute C_P_Proc @name='钱金浩'
用游标的查询
Execute C_P_Proc2 @cname='钱金浩'
(3)删除存储过程C_P_Pro。
DROP PROCEDURE C_P_Proc
1、创建存储过程,统计某顾客的报纸订阅总份数,以顾客号为输入参数,订阅总份数为输出参数;
create procedure C_P_Pre
(
@cno char(4) ,
@num int output
)
as
select @num=sum(num)
from cp
where @cno=cp.cno
2、执行存储过程,实现对某一顾客的报纸订阅总份数打印出,如输出“10000001”号顾客的订阅总份数。
declare @num int
execute C_P_Pre '0001',@num output
select @num
print '“0001”号顾客订阅的总份数为:'+convert(char, @num)