数据库《游标的使用》实验报告.docx
- 文档编号:30050327
- 上传时间:2023-08-04
- 格式:DOCX
- 页数:13
- 大小:595.49KB
数据库《游标的使用》实验报告.docx
《数据库《游标的使用》实验报告.docx》由会员分享,可在线阅读,更多相关《数据库《游标的使用》实验报告.docx(13页珍藏版)》请在冰豆网上搜索。
数据库《游标的使用》实验报告
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语句结果集的数据的技能。
在实际操作中更加熟练的掌握和理解数据库语言,希望在今后的学习中能不断进步。
教师
评语
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 游标的使用 数据库 游标 使用 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)