1、数据库游标的使用实验报告xx大学计算机与信息技术学院实验报告姓 名学 号专业班级课程名称数 据 库 系 统 概 论实验日期成 绩指导教师批改日期实验名称游标的使用一、 实验目的:掌握游标的使用方法 掌握使用游标逐行操作SELECT语句结果集的数据的技能二、 实验内容:游标声明打开游标读取数据关闭游标释放游标三、实验步骤:(一)使用游标的几个步骤:1、声明游标。使用T-SQL语句生成一个结果集,并且定义游标的特征,如游标中的记录是否可以修改;2、打开游标3、推进游标指针,从游标的结果集中提取数据,从游标中检索一行或多行数据成为提取数据。4、逐行处理游标指针所指向的行数据。5、关闭和释放游标。例1
2、、利用标准方式声明一个名称为“student”的游标use 学生选课declare student cursorforselect Sno,Sname,sageFROM studentWHERE sage=19FOR READ ONLYGO open student / 打开gofetch next from student /从游标中读取数据 goclose student / 关闭deallocate student / 删除例2:声明一个名称为Xuanke的游标use 学生选课/*声明一个名称为Xuanke的游标*/DECLARE XUANKE CURSORDYNAMIC /*动态的,动
3、力的*/FOR SELECT Sno,GradeFROM SCWHERE Cno=1FOR UPDATE OF SnoGO/*打开XUANKE游标*/OPEN XUANKEGO/*从XUANKE游标中读取数据*/FETCH NEXT FROM XUANKEGO/*关闭XUANKE游标*/CLOSE XUANKE/*删除XUANKE游标*/DEALLOCATE XUANKE例3:声明一个游标,可前后滚动,可对选课表2中的成绩进行修改use 学生选课/*声明一个游标,可前后滚动,可对选课表中的成绩进行修改use 学生选课*/DECLARE XK CURSORFOR SELECT * FROM SC
4、FOR UPDATE OF Grade /*打开游标XK*/OPEN XKSELECT 游标数据行数=CURSOR_ROWS/*全局变量CURSOR_ROWS返回最后打开的游标中当前存在的合格行的数量。返回值为-m,表示游标被异步填充。返回值-m是键集中当前的行数。返回值为-1,表示游标为动态。因为游标可反映所有更改,所以符合游标的行数不断变化。因此永远不能确定地说所有符合条件的行均已检索到。返回值为,没有被打开的游标,没有符合最后打开的游标的行,或最后打开的游标已被关闭或被释放。返回值为n,游标已完全填充。返回值n是在游标中的总行数。ROWCOUNT 返回受上一语句影响的行数。任何不返回行的
5、语句将这一变量设置为.*/*从游标XK中读取数据*/FETCH NEXT FROM XK/*关闭游标XK*/close XKdeallocate XK例4:为学生表中姓“李”的同学的行声明游标,并使用FETCH NEXT逐个提取这些行。(SCROLL 指定所有的提取选项FIRST, LAST, PRIOR, NEXT, RELATIVE, ABSOLUTE均可使用)use 学生选课/*为学生表中姓“李”的同学的行声明游标,并使用FETCH NEXT逐个提取这些行。(SCROLL 指定所有的提取选项FIRST, LAST, PRIOR, NEXT, RELATIVE, ABSOLUTE均可使用)
6、use 学生选课*/DECLARE STU SCROLL CURSOR FOR SELECT SnameFROM StudentWHERE Sname LIKE 李%ORDER BY SnameGOOPEN STU FETCH NEXT FROM STUWHILE FETCH_STATUS=0BEGINFETCH NEXT FROM STUENDclose STU/*FETCH_STATUS返回针对连接当前打开的任何游标发出的上一条游标FETCH 语句的状态。0 FETCH 语句成功。-1 FETCH 语句失败或行不在结果集中。-2 提取的行不存在*/例5:创建一个SCROLL游标,使其通过L
7、AST, PRIOR, RELATIVE, ABSOLUTE 选项支持所有滚动能力。/*创建一个SCROLL游标,使其通过LAST, PRIOR, RELATIVE, ABSOLUTE 选项支持所有滚动能力。NEXT:返回当前行的下一行,并使其为当前行。如果FETCH NEXT是对游标的第一次提取操作,则返回结果集中的第一行。NEXT为默认的游标提取选项。PRIOR:返回当前行的前一行,并使其为当前行。如果FETCH PRIOR是对游标的第一次提取操作,则没有行返回并且游标置于第一行之前。FIRST:返回游标中的第一行并将其作为当前行。LAST:返回游标中的最后一行并将其作为当前行。ABSOL
8、UTEn/nvar:如果n或nvar为正数,返回从游标头开始的第n行并将返回的行变成新的当前行;如果n或nvar为负数,返回游标尾之前的第n行并将返回的行变成新的当前行;如果n或nvar为,则没有行返回。n必须为整形常量且nvar必须为smallint, tinyint 或int。RELATIVEn/nvar:如果n或nvar为正数,返回当前行之后的第n行并将返回的行变成新的当前行;如果n或nvar为负数,返回当前行之前的第n行并将返回的行变成新的当前行;如果n或nvar为,返回当前行;如果对游标的第一次提取操作时将FETCH RELATIVE 的n或nvar指定为负数或,则没有行返回。n必须
9、为整形常量且nvar必须为smallint, tinyint 或int。use 学生选课*/declare student scroll cursor for select Sname,SageFROM Studentopen studentfetch last from studentfetch prior from studentfetch absolute 2 from studentfetch relative 3 from studentfetch relative -2 from studentdeallocate(二)使用游标修改数据UPDATE和DELETE都是集合操作语句,如
10、果只想修改或删除其中某个记录,则需要用带游标的SELECT语句查出所有满足条件的记录,从中进一步找出要修改或删除的记录,然后用CURRENT形式的UPDATE 和DELETE 语句修改或删除之。具体步骤:1、用DECLARE语句声明游标,并指定FOR UPDATE OF column_name_list。2、用OPEN语句打开游标。3、用FETCH语句推进游标指针。4、检查记录是否是需要修改或删除的记录。5、处理完毕用CLOSE语句关闭游标。用户可以在UPDATE 或DELETE 语句中使用游标来更新或删除表或视图中的行,但不能用来插入新行。例6:统计“数据结构”课程考试成绩的各分数段的分布情
11、况。use 学生选课declare course cursor for select Grade from SCwhere Cno=(select Cno from Course where Cname= Data structure)declare p_100 smallint,p_90 smallint,p_80 smallintdeclare p_70 smallint,p_60 smallint,p_others smallintdeclare p_grade smallintset p_100=0set p_90=0 set p_80=0set p_70=0set p_60=0set
12、 p_others=0set p_grade=0open courseloop:fetch next from course into p_gradeif (p_grade=100)set p_100=p_100+1else if (p_grade=90)set p_90=p_90+1else if (p_grade=80)set p_80=p_80+1else if (p_grade=70)set p_70=p_70+1else if (p_grade=60)set p_60=p_60+1else set p_others=p_others+1if (FETCH_STATUS =0) got
13、o loop print str(p_100)+,+str(p_90)+,+str(p_80)+,print str(p_70)+,+str(p_60)+,+str(p_others)close coursedeallocate course例7:定义一个游标,将学生表中所有学生的姓名、年龄显示出来。use 学生选课go declare sname varchar(50),sage intdeclare stud scroll cursor forselect Sname,Sage from Student for read onlyopen studfetch from stud into
14、sname,sagewhile FETCH_STATUS=0begin print 学生姓名:+sname+ +学生年龄:+str(sage) fetch from stud into sname,sageendclose studdeallocate stud例8:通过游标将学生表中第5位学生的年龄由19改为21use 学生选课go declare stu scroll cursor for select Sname, Sage from Studentfor update of Sageopen stufetch absolute 5 from stuupdate Studentset Sage=21where current of stufetch absolute 5 from stu close studeallocate stu三、 结果分析 (或者实验体会)本次试验学习了游标的使用,在老师的指导下通过在SQL Server 2005上对一些相关的例题进行操作了解并掌握了游标的使用方法。练习进行了游标的声明、如何打开游标、如何读取数据和如何关闭游标以及怎样释放游标的基本练习,并学会了使用游标逐行操作SELECT语句结果集的数据的技能。在实际操作中更加熟练的掌握和理解数据库语言,希望在今后的学习中能不断进步。 教 师评 语
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1