数据库实验-实验 游标

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验报告

一、实验目的:

•掌握游标的使用方法

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

二、实验内容:

•游标声明

•打开游标

•读取数据

•关闭游标

•释放游标

三、实验步骤:

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

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

2、打开游标

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

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

5、关闭和释放游标。

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

use 学生

declare student cursor

for

select Sno,Sname,Sbirthday

FROM student

WHERE Sbirthday=19

FOR READ ONLY

GO

open student // 打开

go

fetch next from student //从游标中读取数据

fetch next from student

go

close student // 关闭

deallocate student // 删除

2:声明一个名称为Xuanke的游标

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

DECLARE XUANKE CURSOR

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

FOR

SELECT Sno,Degree

FROM SCORE

WHERE Cno='3-105'

FOR UPDATE OF Sno

GO

/*打开XUANKE游标*/

OPEN XUANKE

GO

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

FETCH NEXT FROM XUANKE

GO

/*关闭XUANKE游标*/

CLOSE XUANKE

/*删除XUANKE游标*/

DEALLOCATE XUANKE

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

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

DECLARE XK CURSOR

FOR SELECT*FROM SCORE

FOR UPDATE OF Degree

/*打开游标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逐个提取这些行。(SCOREROLL 指定所有的提取选项FIRST, LAST, PRIOR, NEXT, RELATIVE, ABSOLUTE均可使用)

/*为学生表中姓“李”的同学的行声明游标,并使用FETCH NEXT逐个提取这些行。(SCOREROLL 指定所有的提取选项FIRST, LAST, PRIOR, NEXT, RELATIVE, ABSOLUTE均可使用)

use 学生选课*/

DECLARE STU SCOREROLL 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:创建一个SCOREROLL游标,使其通过LAST, PRIOR, RELATIVE, ABSOLUTE 选项支持所有滚动能力。

/*创建一个SCOREROLL游标,使其通过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 STU SCROLL CURSOR for

select Sname,Sbirthday

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 STU

(二)使用游标修改数据

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

相关文档
最新文档