简介
- 游标提供了一种对从表中检索出的数据进行操作的灵活手段,就本质而言,游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制 。
- 游标使用步骤:
(1)DECLARE声明游标
(2)OPEN打开游标(填充游标数据)
(3)从一个游标中FETCH(取)信息,对信息进行处理
(4)CLOSE关闭游标
(5)DEALLOCATE释放游标
游标声明
- 语法格式
DECLARE <游标名> [INSENSITIVE][SCROLL] CURSOR
FOR <SELECT查询>
[FOR{READ ONLY|UPDATE[OF <列名>[,<列名>…]]}]
-
参数说明:
(1)INSENSITIVE
指出所声明的游标为不敏感游标,即静态游标。
(2)SCROLL
指出该游标可以用FETCH
命令里定义的所有方法来存取数据,允许删除和更新(假定没有使用INSENSITIVE选项);
(3) FOR<SELECT查询>:决定游标结果集合
(4)FOR READ ONLY
或FOR UPDATE
说明游标为只读的或可修改的。默认是可修改的。
(5)UPDATE [OF <列名>[,<列名>…]]
定义可以修改的列。如果省略 OF <列名>[,<列名>…],则允许修改所有列。 -
如下:
DECLARE 学生表_cur1 SCROLL CURSOR
FOR SELECT 学号,姓名,性别,籍贯,所在院系,累计学分
FROM 学生表
WHERE 专业='计算机'
游标相关变量
@@CURSOR_STATUS
:读取游标状态或检查游标变量是否与游标相关联。@@FETCH_STATUS
:读取最后一次游标数据提取操作结果状态。0:取操作成功;-1:取操作失败,所指定的位置超出了范围;-2:要取的行不在记录集内,已从集合中删除。@@CURSOR_ROWS
:显示游标集合中的行数。-n:正在向游标中载入数据,反映的是结果集当前的数据行数;n:结果集合的行数;0:结果集中没有匹配的行;-1:指出游标是动态的。
游标变量
DECLARE @cur_var CURSOR -- 声明游标变量
DECLARE C1 CURSOR -- 声明游标
FOR SELECT * FROM COURSE
SET @cur_var=C1
打开游标
- 当将游标赋值给游标变量以后,就可以打开游标变量
OPEN @cur_var
读取游标数据
- 使用 Fetch
USE 教学管理
Go
DECLARE 教师表_CURSOR CURSOR FOR
SELECT 工号,姓名,所在院系,职称 FROM 教师表 ORDER BY
工号
DECLARE @TNUM CHAR(5),@TNAME CHAR(10),@TDEPA
CHAR(20), @TRANK CHAR(10)
OPEN 教师表_CURSOR
FETCH NEXT FROM 教师表_CURSOR INTO @TNUM ,@TNAME ,@TDEPA, @TRANK
WHILE @@FETCH_STATUS=0
BEGIN
SELECT @TNUM ,@TNAME ,@TDEPA, @TRANK
FETCH NEXT FROM 教师表_CURSOR INTO @TNUM ,@TNAME ,@TDEPA, @TRANK
END
CLOSE 教师表_CURSOR
DEALLOCATE 教师表_CURSOR
GO
关闭游标
CLOSE 游标名
释放游标
DEALLOCATE 游标名