数据库原理与应用实验5-游标
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
电子与信息工程学院实验报告
班级学号姓名吴前斌
同组
实验课程:数据库实验
实验项目:游标
实验日期:2019 年06 月09 日
三、实验步骤
1、游标的创建。
1)使用S_C数据库中的S表、C表、SC表创建一个存储过程—sp_CURSOR1。该存储过程的作用是:显示所有的课程信息,如果成绩>=90显示成绩本身;成绩>=80显示良;成绩>=70显示中;成绩>=60显示及格;成绩>=0显示不及格;如果没有成绩则显示无成绩。信息还包含学号,姓名,课程和成绩,显示格式如下:学号---姓名---课程---成绩,如图1所示。
要求使用游标技术实现上述要求,使用Print语句实现显示。
图1 成绩显示格式
sp_CURSOR1的创建语句:
if exists(select name from sysobjects where name='sp_CURSOR1'and type='p')
drop procedure sp_CURSOR1
go
create proc sp_CURSOR1
as
declare@g float
declare sp_cur cursor
for select s.sno,sname,cname from s,sc,c
where s.sno=sc.sno and o=o
open sp_cur
fetch next from sp_cur into@g
while(@@fetch_status=0)
if @grade is null
begin
print ‘无成绩’
fetch next from sp_cur into @g
end
else if(@g>=90)
begin
select grade from sc where grade=@g
fetch next from sp_cur into@g
end
else if(@g>=80and@g<90)
begin
print'良'
fetch next from sp_cur into@g
end
begin
print'中'
fetch next from sp_cur into@g
end
else if(@g>=60and@g<70)
begin
print'及格'
fetch next from sp_cur into@g
end
else
begin
print'不及格'
fetch next from sp_cur into@g
end
end
close sp_cur
deallocate sp_cur
exec sp_CURSOR1grade
结果描述:
2、游标的使用。
计算银行利息。有一储户账号为0001,银行存取记录如下:
存取记录数据表名为fundlist,字段名为id(编号,int),cid(储户账号,varchar(20)),ex-date(交易日期,datetime),ex-money(交易金额,money),balance(账户余额,money)。根据有关规定,银行存款利息为:2011-04-01号之前(包括)为年利息2%,之后(不包括)为年利息3%,请用编写一个存储过程sp_cal_interest 用来计算该储户的当前利息,要求利用游标实现。说明:当前用getdate()表示,年利息2%用存入的天数*2%/365表示利息。
创建语句的代码如下:
IF EXISTS(SELECT name FROM sysobjects WHERE name = 'sp_cal_interest' AND type = 'P')
DROP PROCEDURE sp_cal_interest
GO
CREATE PROCEDURE sp_cal_interest
AS
DECLARE @money money
DECLARE @pretime datetime
DECLARE @all money
DECLARE @lixi money
DECLARE @T datetime
BEGIN
SET @T = CAST('2011-04-01' AS datetime)
DECLARE f_cursor CURSOR FOR
SELECT ex_date, balance FROM fundlist
OPEN f_cursor
FETCH NEXT FROM f_cursor INTO @time, @money
SET @pretime = @time
SET @all = @money
WHILE @@FETCH_STATUS = 0
BEGIN
IF @time <= @T
SET @lixi = @all*DATEDIFF(DAY, @pretime, @time)*0.02/365 ELSE IF @time > @T AND @pretime <= @T
SET @lixi = @all*DATEDIFF(DAY, @pretime, @T)*0.02/365
+@all*DATEDIFF(DAY, @T, @time)*0.03/365
ELSE
SET @lixi = @all*DATEDIFF(DAY, @pretime, @time)*0.03/365 SET @all = @all+@lixi+@money
SET @pretime = @time
FETCH NEXT FROM f_cursor INTO @time, @money
END
PRINT @lixi