第 12章 游 标
11.1 游标的基本概念
11.2 游标的建立及使用
11.1 游标的基本概念
游标:每次处理 SELECT语句返回的结果集的一行
或部分行,遍历程序。
游标支持以下功能:
①在结果集中定位特定行;
②从结果集的当前位置检索行;
③支持对结果集中当前位置的行进行数据修改。
11.2 游标的建立及使用
游标建立及使用的步骤:
1、使用 DECLARE CURSOR语句声明一个游标;
DECLARE 游标名 CURSOR
FOR
查询语句
[ FOR READ ONLY |UPDATE OF 列名称 ]
2、使用 OPEN语句执行游标
OPEN 游标名
3、使用 FETCH语句,从结果集中检索单独行
FETCH [ NEXT | PRIOR | FIRST | LAST ]
FROM 游标名
[ INTO 变量名,…… ]
4、使用 UPDATE或 DELETE语句修改行
5、使用 CLOSE语句关闭游标,结束动态游标的
操作并释放资源,可用 OPEN再次打开。
CLOSE 游标名
6、使用 DEALLOCATE语句从当前的会话中移除游
标的引用,不能用 OPEN打开,只能使用
DECLARE从新声明。
DEALLOCATE 游标名
@@FETCH_STATUS—— 游标状态变量
▲ 0 FETCH语句成功
▲ -1 FETCH语句失眠或此行不在结果集中
▲ -2 被提取的行不存在
例 1、声明一游标,从 Course表中检索所有记录。
USE Xk
DECLARE CrsCourse CURSOR
FOR
SELECT * FROM Course ORDER BY CouNo
OPEN CrsCourse
FETCH NEXT FROM CrsCourse
UPDATE Course SET LimitNum=22
WHERE CURRENT OF CrsCourse
CLOSE CrsCourse
DEALLOCATE CrsCourse
例 2、将值存入变量
USE Xk
DECLARE @CouNo varchar(3),@CouName varchar(30)
DECLARE CrsCourse CURSOR
FOR
SELECT CouNo,CouName FROM Course
ORDER BY CouNo
OPEN CrsCourse
FETCH NEXT FROM CrsCourse
INTO @COuNo,@CouName
PRINT '课程号,'+@CouNo+'课程名称,'+@CouName
CLOSE CrsCourse
DEALLOCATE CrsCourse
例 3、利用游标遍历,显示整个结果集
USE Xk
--定义游标
DECLARE @CouNo varchar(3),@CouName
varchar(20)
DECLARE CrsCourse CURSOR
FOR
SELECT CouNo,CouName FROM Course ORDER BY
CouNo
--打开游标
OPEN CrsCourse
--取得第一条记录
FETCH NEXT FROM CrsCourse INTO
@COuNo,@CouName
--通过判断 @@FETCH_STATUS进行循环
WHILE @@FETCH_STATUS=0
BEGIN
PRINT '课程号,' + @CouNo+'课程名称:‘
+ @CouName
--取得下一条记录
FETCH NEXT FROM CrsCourse INTO
@CouNo,@CouName
END
CLOSE CrsCourse
DEALLOCATE CrsCourse
11.1 游标的基本概念
11.2 游标的建立及使用
11.1 游标的基本概念
游标:每次处理 SELECT语句返回的结果集的一行
或部分行,遍历程序。
游标支持以下功能:
①在结果集中定位特定行;
②从结果集的当前位置检索行;
③支持对结果集中当前位置的行进行数据修改。
11.2 游标的建立及使用
游标建立及使用的步骤:
1、使用 DECLARE CURSOR语句声明一个游标;
DECLARE 游标名 CURSOR
FOR
查询语句
[ FOR READ ONLY |UPDATE OF 列名称 ]
2、使用 OPEN语句执行游标
OPEN 游标名
3、使用 FETCH语句,从结果集中检索单独行
FETCH [ NEXT | PRIOR | FIRST | LAST ]
FROM 游标名
[ INTO 变量名,…… ]
4、使用 UPDATE或 DELETE语句修改行
5、使用 CLOSE语句关闭游标,结束动态游标的
操作并释放资源,可用 OPEN再次打开。
CLOSE 游标名
6、使用 DEALLOCATE语句从当前的会话中移除游
标的引用,不能用 OPEN打开,只能使用
DECLARE从新声明。
DEALLOCATE 游标名
@@FETCH_STATUS—— 游标状态变量
▲ 0 FETCH语句成功
▲ -1 FETCH语句失眠或此行不在结果集中
▲ -2 被提取的行不存在
例 1、声明一游标,从 Course表中检索所有记录。
USE Xk
DECLARE CrsCourse CURSOR
FOR
SELECT * FROM Course ORDER BY CouNo
OPEN CrsCourse
FETCH NEXT FROM CrsCourse
UPDATE Course SET LimitNum=22
WHERE CURRENT OF CrsCourse
CLOSE CrsCourse
DEALLOCATE CrsCourse
例 2、将值存入变量
USE Xk
DECLARE @CouNo varchar(3),@CouName varchar(30)
DECLARE CrsCourse CURSOR
FOR
SELECT CouNo,CouName FROM Course
ORDER BY CouNo
OPEN CrsCourse
FETCH NEXT FROM CrsCourse
INTO @COuNo,@CouName
PRINT '课程号,'+@CouNo+'课程名称,'+@CouName
CLOSE CrsCourse
DEALLOCATE CrsCourse
例 3、利用游标遍历,显示整个结果集
USE Xk
--定义游标
DECLARE @CouNo varchar(3),@CouName
varchar(20)
DECLARE CrsCourse CURSOR
FOR
SELECT CouNo,CouName FROM Course ORDER BY
CouNo
--打开游标
OPEN CrsCourse
--取得第一条记录
FETCH NEXT FROM CrsCourse INTO
@COuNo,@CouName
--通过判断 @@FETCH_STATUS进行循环
WHILE @@FETCH_STATUS=0
BEGIN
PRINT '课程号,' + @CouNo+'课程名称:‘
+ @CouName
--取得下一条记录
FETCH NEXT FROM CrsCourse INTO
@CouNo,@CouName
END
CLOSE CrsCourse
DEALLOCATE CrsCourse