扩大
缩小
  

十七、游标

一、什么是游标?

游标是一种能从包含多个元组的集合中每次读取一个元组的机制。游标总是和一段SELECT语句关联,
SELECT语句查询出的结果集就作为集合,游标能每次从该集合中读取出一个元组进行不同操作。

二、游标的核心价值

1. 将游标定位在结果集特定元组。
2. 将游标指定结果集中的元组数据读出。
3. 利用循环读取结果集中的多个元组数据。
4. 对游标指定结果集的元组进行数据修改。
5. 为其它用户设置结果集数据的更新限制。
6. 提供脚本、存储过程和触发器中访问结果集中数据的TSQL语句

三、游标的基本使用

声明游标

DECLARE cursor_name CURSOR [INSENSITIVE] [SCROLL] CURSOR
FOR <SELECT语句>
[FOR READ ONLY|UPDATE[OF <列名>[,...n]]]
INSENSITIVE:定义游标所选出的结果集存放在一个临时表,对该游标的读取操作都有该临时表来应
答。游标不会随着基本表内容的改变而改变,同时也无法通过游标来更新基本表。如果不使用该关键
字,对基本表的更新、删除都会反应到游标中。
SCROLL:指定游标使用的读取选项,默认值为NEXT,如果不使用该关键字,那么读取游标只能进行
NEXT操作,如果使用该关键字,那么游标向任何方向,或者任何位置移动,进行NEXT、LAST、
FIRST、PRIOR、RELATIVE n、ABSULUTE n操作。
FOR READ ONLY:表示定义游标为只读游标,不允许使用UPDATE、DELETE语句更新游标内的数据。
UPDATE[OF <类名>[,...n]]:指定游标内可以更新的列,如果有指定要更新的列,则表明所有列都允
许更新。

打开游标

OPEN [LOCAL|GLOBAL] cursor_name;

读取游标

FETCH [NEXT|PRIOR|FIRST|LAST
|ABSLUTE n|@nvar]
|RELATIVE n|@nvar]
FROM [GLOBAL]cursor_name
INTO[@nvar1,...n]

关闭游标

在处理完结果集中数据之后,必须关闭游标来释放结果集
CLOSE cursor_name

释放游标

游标使用不再需要之后,需要释放游标,以获取与游标有关的一切资源。
DEALLOCATE cursor_name
游标系统白能量与函数
游标系统变量与函数返回有关游标的信息。
@@CURSOR_NUM
返回最后打开的游标中满足条件的元组数
@@FETCH_STATUS
返回上次执行FETCH命令的状态

CURSOR_STATUS('GLOBAL|LOCAL','cursor_name')

用于确定是否返回游标和结果集

利用游标修改和删除表数据

可以通过游标来UPDATE修改或删除DELETE表中的当前数据行。
--修改数据
UPDATE table_name
SET column_name=value|expression
WHERE CURRENT OF cursor_name
--删除数据
DELETE FROM table_name
WHERE CURRENT OF cursor_name
posted @ 2024-01-12 14:39  风筝遇上风  阅读(1)  评论(0编辑  收藏  举报