数据库原理与应用实验5-游标

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档