数据库《游标的使用》实验报告.docx

上传人:b****8 文档编号:30050327 上传时间:2023-08-04 格式:DOCX 页数:13 大小:595.49KB
下载 相关 举报
数据库《游标的使用》实验报告.docx_第1页
第1页 / 共13页
数据库《游标的使用》实验报告.docx_第2页
第2页 / 共13页
数据库《游标的使用》实验报告.docx_第3页
第3页 / 共13页
数据库《游标的使用》实验报告.docx_第4页
第4页 / 共13页
数据库《游标的使用》实验报告.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

数据库《游标的使用》实验报告.docx

《数据库《游标的使用》实验报告.docx》由会员分享,可在线阅读,更多相关《数据库《游标的使用》实验报告.docx(13页珍藏版)》请在冰豆网上搜索。

数据库《游标的使用》实验报告.docx

数据库《游标的使用》实验报告

xx大学计算机与信息技术学院

实验报告

姓名

学号

专业班级

课程名称

数据库系统概论

实验日期

成绩

指导教师

批改日期

实验名称

游标的使用

一、实验目的:

•掌握游标的使用方法

•掌握使用游标逐行操作SELECT语句结果集的数据的技能

二、实验内容:

•游标声明

•打开游标

•读取数据

•关闭游标

•释放游标

三、实验步骤:

(一)使用游标的几个步骤:

1、声明游标。

使用T-SQL语句生成一个结果集,并且定义游标的特征,如游标中的记录是否可以修改;

2、打开游标

3、推进游标指针,从游标的结果集中提取数据,从游标中检索一行或多行数据成为提取数据。

4、逐行处理游标指针所指向的行数据。

5、关闭和释放游标。

例1、

利用标准方式声明一个名称为“student”的游标

use学生选课

declarestudentcursor

for

selectSno,Sname,sage

FROMstudent

WHEREsage=19

FORREADONLY

GO

openstudent//打开

go

fetchnextfromstudent//从游标中读取数据

go

closestudent//关闭

deallocatestudent//删除

例2:

声明一个名称为Xuanke的游标

use学生选课

/*声明一个名称为Xuanke的游标*/

DECLAREXUANKECURSOR

DYNAMIC/*动态的,动力的*/

FOR

SELECTSno,Grade

FROMSC

WHERECno='1'

FORUPDATEOFSno

GO

/*打开XUANKE游标*/

OPENXUANKE

GO

/*从XUANKE游标中读取数据*/

FETCHNEXTFROMXUANKE

GO

/*关闭XUANKE游标*/

CLOSEXUANKE

/*删除XUANKE游标*/

DEALLOCATEXUANKE

例3:

声明一个游标,可前后滚动,可对选课表2中的成绩进行修改

use学生选课

/*声明一个游标,可前后滚动,可对选课表中的成绩进行修改

use学生选课*/

DECLAREXKCURSOR

FORSELECT*FROMSC

FORUPDATEOFGrade

/*打开游标XK*/

OPENXK

SELECT'游标数据行数'=@@CURSOR_ROWS

/*

全局变量@@CURSOR_ROWS返回最后打开的游标中当前存在的合格行的数量。

返回值为-m,表示游标被异步填充。

返回值-m是键集中当前的行数。

返回值为-1,表示游标为动态。

因为游标可反映所有更改,所以符合游标的行数不断变化。

因此永远不能确定地说所有符合条件的行均已检索到。

返回值为,没有被打开的游标,没有符合最后打开的游标的行,或最后打开的游标已被关闭或被释放。

返回值为n,游标已完全填充。

返回值n是在游标中的总行数。

@@ROWCOUNT

返回受上一语句影响的行数。

任何不返回行的语句将这一变量设置为.

*/

/*从游标XK中读取数据*/

FETCHNEXTFROMXK

/*关闭游标XK*/

closeXK

deallocateXK

例4:

为学生表中姓“李”的同学的行声明游标,并使用FETCHNEXT逐个提取这些行。

(SCROLL指定所有的提取选项FIRST,LAST,PRIOR,NEXT,RELATIVE,ABSOLUTE均可使用)

use学生选课

/*为学生表中姓“李”的同学的行声明游标,并使用FETCHNEXT逐个提取这些行。

(SCROLL指定所有的提取选项FIRST,LAST,PRIOR,NEXT,RELATIVE,ABSOLUTE均可使用)

use学生选课*/

DECLARESTUSCROLLCURSOR

FOR

SELECTSname

FROMStudent

WHERESnameLIKE'李%'

ORDERBYSname

GO

OPENSTU

FETCHNEXTFROMSTU

WHILE@@FETCH_STATUS=0

BEGIN

FETCHNEXTFROMSTU

END

closeSTU

/*

@@FETCH_STATUS返回针对连接当前打开的任何游标发出的上一条游标FETCH语句的状态。

0FETCH语句成功。

-1FETCH语句失败或行不在结果集中。

-2提取的行不存在

*/

例5:

创建一个SCROLL游标,使其通过LAST,PRIOR,RELATIVE,ABSOLUTE选项支持所有滚动能力。

/*创建一个SCROLL游标,使其通过LAST,PRIOR,RELATIVE,ABSOLUTE选项支持所有滚动能力。

NEXT:

返回当前行的下一行,并使其为当前行。

如果FETCHNEXT是对游标的第一次提取操作,则返回结果集中的第一行。

NEXT为默认的游标提取选项。

PRIOR:

返回当前行的前一行,并使其为当前行。

如果FETCHPRIOR是对游标的第一次提取操作,则没有行返回并且游标置于第一行之前。

FIRST:

返回游标中的第一行并将其作为当前行。

LAST:

返回游标中的最后一行并将其作为当前行。

ABSOLUTE{n/@nvar}:

如果n或@nvar为正数,返回从游标头开始的第n行并将返回的行变成新的当前行;如果n或@nvar为负数,返回游标尾之前的第n行并将返回的行变成新的当前行;如果n或@nvar为,则没有行返回。

n必须为整形常量且@nvar必须为smallint,tinyint或int。

RELATIVE{n/@nvar}:

如果n或@nvar为正数,返回当前行之后的第n行并将返回的行变成新的当前行;如果n或@nvar为负数,返回当前行之前的第n行并将返回的行变成新的当前行;如果n或@nvar为,返回当前行;如果对游标的第一次提取操作时将FETCHRELATIVE的n或@nvar指定为负数或,则没有行返回。

n必须为整形常量且@nvar必须为smallint,tinyint或int。

use学生选课*/

declarestudentscrollcursor

for

selectSname,Sage

FROMStudent

openstudent

fetchlastfromstudent

fetchpriorfromstudent

fetchabsolute2fromstudent

fetchrelative3fromstudent

fetchrelative-2fromstudent

deallocate

(二)使用游标修改数据

UPDATE和DELETE都是集合操作语句,如果只想修改或删除其中某个记录,则需要用带游标的SELECT语句查出所有满足条件的记录,从中进一步找出要修改或删除的记录,然后用CURRENT形式的UPDATE和DELETE语句修改或删除之。

具体步骤:

1、用DECLARE语句声明游标,并指定FORUPDATEOFcolumn_name_list。

2、用OPEN语句打开游标。

3、用FETCH语句推进游标指针。

4、检查记录是否是需要修改或删除的记录。

5、处理完毕用CLOSE语句关闭游标。

用户可以在UPDATE或DELETE语句中使用游标来更新或删除表或视图中的行,但不能用来插入新行。

例6:

统计“数据结构”课程考试成绩的各分数段的分布情况。

use学生选课

declarecoursecursor

for

selectGradefromSC

whereCno=(selectCnofromCourse

whereCname='Datastructure')

declare@p_100smallint,@p_90smallint,@p_80smallint

declare@p_70smallint,@p_60smallint,@p_otherssmallint

declare@p_gradesmallint

set@p_100=0

set@p_90=0

set@p_80=0

set@p_70=0

set@p_60=0

set@p_others=0

set@p_grade=0

opencourse

loop:

fetchnextfromcourseinto@p_grade

if(@p_grade=100)set@p_100=@p_100+1

elseif(@p_grade>=90)set@p_90=@p_90+1

elseif(@p_grade>=80)set@p_80=@p_80+1

elseif(@p_grade>=70)set@p_70=@p_70+1

elseif(@p_grade>=60)set@p_60=@p_60+1

elseset@p_others=@p_others+1

if(@@FETCH_STATUS=0)

gotoloop

printstr(@p_100)+','+str(@p_90)+','+str(@p_80)+','

printstr(@p_70)+','+str(@p_60)+','+str(@p_others)

closecourse

deallocatecourse

例7:

定义一个游标,将学生表中所有学生的姓名、年龄显示出来。

use学生选课

go

declare@snamevarchar(50),@sageint

declarestudscrollcursor

for

selectSname,SagefromStudent

forreadonly

openstud

fetchfromstudinto@sname,@sage

while@@FETCH_STATUS=0

begin

print'学生姓名:

'+@sname+''+'学生年龄:

'+str(@sage)

fetchfromstudinto@sname,@sage

end

closestud

deallocatestud

例8:

通过游标将学生表中第5位学生的年龄由19改为21

use学生选课

go

declarestuscrollcursor

for

selectSname,SagefromStudent

forupdateofSage

openstu

fetchabsolute5fromstu

updateStudent

setSage=21

wherecurrentofstu

 

fetchabsolute5fromstu

closestu

deallocatestu

 

三、结果分析(或者实验体会)

本次试验学习了游标的使用,在老师的指导下通过在SQLServer2005上对一些相关的例题进行操作了解并掌握了游标的使用方法。

练习进行了游标的声明、如何打开游标、如何读取数据和如何关闭游标以及怎样释放游标的基本练习,并学会了使用游标逐行操作SELECT语句结果集的数据的技能。

在实际操作中更加熟练的掌握和理解数据库语言,希望在今后的学习中能不断进步。

教师

评语

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1