您好,欢迎来到尔游网。
搜索
您的当前位置:首页数据库《游标的使用》实验报告

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

来源:尔游网
xx大学计算机与信息技术学院

姓 名 课程名称 成 绩 实验名称 一、实验目的: •掌握游标的使用方法 验

报告

实验日期 学 号 专业班级 数 据 库 系 统 概 论 指导教师 游标的使用 批改日期 •掌握使用游标逐行操作SELECT语句结果集的数据的技能 二、实验内容: •游标声明 •打开游标 •读取数据 •关闭游标 •释放游标 三、实验步骤: (一)使用游标的几个步骤: 1、声明游标。使用T-SQL语句生成一个结果集,并且定义游标的特征,如游标中的记录是否可以修改; 2、打开游标 3、推进游标指针,从游标的结果集中提取数据,从游标中检索一行或多行数据成为提取数据。 4、逐行处理游标指针所指向的行数据。 5、关闭和释放游标。 例1、 利用标准方式声明一个名称为“student”的游标 use 学生选课 declare student cursor for select Sno,Sname,sage FROM student WHERE sage=19 FOR READ ONLY GO open student // 打开 go fetch next from student //从游标中读取数据 go close student // 关闭 deallocate student // 删除 例2: 声明一个名称为Xuanke的游标 use 学生选课 /*声明一个名称为Xuanke的游标*/ DECLARE XUANKE CURSOR DYNAMIC /*动态的,动力的*/ FOR SELECT Sno,Grade FROM SC WHERE Cno='1' FOR UPDATE OF Sno GO /*打开XUANKE游标*/ OPEN XUANKE GO /*从XUANKE游标中读取数据*/ FETCH NEXT FROM XUANKE GO /*关闭XUANKE游标*/ CLOSE XUANKE /*删除XUANKE游标*/ DEALLOCATE XUANKE 例3: 声明一个游标,可前后滚动,可对选课表2中的成绩进行修改 use 学生选课 /*声明一个游标,可前后滚动,可对选课表中的成绩进行修改 use 学生选课*/ DECLARE XK CURSOR FOR SELECT * FROM SC FOR UPDATE OF Grade /*打开游标XK*/ OPEN XK SELECT '游标数据行数'=@@CURSOR_ROWS /* 全局变量@@CURSOR_ROWS返回最后打开的游标中当前存在的合格行的数量。 返回值为-m,表示游标被异步填充。返回值-m是键集中当前的行数。 返回值为-1,表示游标为动态。因为游标可反映所有更改,所以符合游标的行数不断变化。因此永远不能确定地说所有符合条件的行均已检索到。 返回值为,没有被打开的游标,没有符合最后打开的游标的行,或最后打开的游标已被关闭或被释放。 返回值为n,游标已完全填充。返回值n是在游标中的总行数。 @@ROWCOUNT 返回受上一语句影响的行数。任何不返回行的语句将这一变量设置为. */ /*从游标XK中读取数据*/ FETCH NEXT FROM XK /*关闭游标XK*/ close XK deallocate XK 例4: 为学生表中姓“李”的同学的行声明游标,并使用FETCH NEXT逐个提取这些行。(SCROLL 指定所有的提取选项FIRST, LAST, PRIOR, NEXT, RELATIVE, ABSOLUTE均可使用) use 学生选课 /*为学生表中姓“李”的同学的行声明游标,并使用FETCH NEXT逐个提取这些行。(SCROLL 指定所有的提取选项FIRST, LAST, PRIOR, NEXT, RELATIVE, ABSOLUTE均可使用) use 学生选课*/ DECLARE STU SCROLL CURSOR FOR SELECT Sname FROM Student WHERE Sname LIKE '李%' ORDER BY Sname GO OPEN STU FETCH NEXT FROM STU WHILE @@FETCH_STATUS=0 BEGIN FETCH NEXT FROM STU END close STU /* @@FETCH_STATUS返回针对连接当前打开的任何游标发出的上一条游标FETCH 语句的状态。 0 FETCH 语句成功。 -1 FETCH 语句失败或行不在结果集中。 -2 提取的行不存在 */ 例5: 创建一个SCROLL游标,使其通过LAST, PRIOR, RELATIVE, ABSOLUTE 选项支持所有滚动能力。 /*创建一个SCROLL游标,使其通过LAST, PRIOR, RELATIVE, ABSOLUTE 选项支持所有滚动能力。 NEXT:返回当前行的下一行,并使其为当前行。如果FETCH NEXT是对游标的第一次提取操作,则返回结果集中的第一行。NEXT为默认的游标提取选项。 PRIOR:返回当前行的前一行,并使其为当前行。如果FETCH PRIOR是对游标的第一次提取操作,则没有行返回并且游标置于第一行之前。 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为,返回当前行;如果对游标的第一次提取操作时将FETCH RELATIVE 的n或@nvar指定为负数或,则没有行返回。n必须为整形常量且@nvar必须为smallint, tinyint 或int。 use 学生选课*/ declare student scroll cursor for select Sname,Sage FROM Student open student fetch last from student fetch prior from student fetch absolute 2 from student fetch relative 3 from student fetch relative -2 from student deallocate (二)使用游标修改数据 UPDATE和DELETE都是集合操作语句,如果只想修改或删除其中某个记录,则需要用带游标的SELECT语句查出所有满足条件的记录,从中进一步找出要修改或删除的记录,然后用CURRENT形式的UPDATE 和DELETE 语句修改或删除之。具体步骤: 1、用DECLARE语句声明游标,并指定FOR UPDATE OF column_name_list。 2、用OPEN语句打开游标。 3、用FETCH语句推进游标指针。 4、检查记录是否是需要修改或删除的记录。 5、处理完毕用CLOSE语句关闭游标。 用户可以在UPDATE 或DELETE 语句中使用游标来更新或删除表或视图中的行,但不能用来插入新行。 例6: 统计“数据结构”课程考试成绩的各分数段的分布情况。 use 学生选课 declare course cursor for select Grade from SC where Cno=(select Cno from Course where Cname=' Data structure') declare @p_100 smallint,@p_90 smallint,@p_80 smallint declare @p_70 smallint,@p_60 smallint,@p_others smallint declare @p_grade smallint 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 open course loop: fetch next from course into @p_grade if (@p_grade=100)set @p_100=@p_100+1 else if (@p_grade>=90)set @p_90=@p_90+1 else if (@p_grade>=80)set @p_80=@p_80+1 else if (@p_grade>=70)set @p_70=@p_70+1 else if (@p_grade>=60)set @p_60=@p_60+1 else set @p_others=@p_others+1 if (@@FETCH_STATUS =0) goto loop print str(@p_100)+','+str(@p_90)+','+str(@p_80)+',' print str(@p_70)+','+str(@p_60)+','+str(@p_others) close course deallocate course 例7: 定义一个游标,将学生表中所有学生的姓名、年龄显示出来。 use 学生选课 go declare @sname varchar(50),@sage int declare stud scroll cursor for select Sname,Sage from Student for read only open stud fetch from stud into @sname,@sage while @@FETCH_STATUS=0 begin print '学生姓名:'+@sname+' '+'学生年龄:'+str(@sage) fetch from stud into @sname,@sage end close stud deallocate stud 例8: 通过游标将学生表中第5位学生的年龄由19改为21 use 学生选课 go declare stu scroll cursor for select Sname, Sage from Student for update of Sage open stu fetch absolute 5 from stu update Student set Sage=21 where current of stu fetch absolute 5 from stu close stu deallocate stu 三、结果分析 (或者实验体会) 本次试验学习了游标的使用,在老师的指导下通过在SQL Server 2005上对一些相关的例题进行操作了解并掌握了游标的使用方法。练习进行了游标的声明、如何打开游标、如何读取数据和如何关闭游标以及怎样释放游标的基本练习,并学会了使用游标逐行操作SELECT语句结果集的数据的技能。在实际操作中更加熟练的掌握和理解数据库语言,希望在今后的学习中能不断进步。 教 师 评 语

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- axer.cn 版权所有 湘ICP备2023022495号-12

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务