数据库实验-实验 游标
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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 和