游标cursor 与循环fetch

本文部分非原创

使用示例:

declare myCursor cursor
for
select ID,[Column1],[Num] from Table1

open myCursor;
declare @ID int,@Column1 varchar(50),@Num int
fetch next from myCursor into @ID ,@Column1 ,@Num;
while @@FETCH_STATUS = 0
begin

  --do something

  fetch next from myCursor into  @ID ,@Column1 ,@Num;
end
close myCursor
deallocate myCursor

由select语句查来的记录称为结果集。
在一些应用程序中不能将结果集作为一个处理单元来处理,
它就需要一种处理机来分批处理,这时就需要游标来控制。

1.声明游标:
它主要用来存储过程,触发器和语句中,对结果集逐行处理。

语法:declare 游标名称 insensitive scroll cursor
for select 语句
for [(read only ) / update of [字段名……]]

注意:当用{update of}指定可更新的字段时,指定所引用的
游标名用{where current of游标名};当使用{read only}时,
游标中的数据为只读。

例:declare AA_cursor cursor for select * from AA
where 地址=‘褡裢‘
for update of 姓名,电话
open AA_cursor
fetch next from AA_cursor
update AA set 姓名=‘流弹‘ where current of AA_cursor
close AA_cursor
deallocate AA_cursor

2.打开已声明的游标:

使用 open 打开.

语法:open 游标名称

注意: 打开后可以使用来判断打开操作是否成功,如果为0,
则打开成功,打开后使用无参函数来获取游标,
当前存在的记录数,共有四种取值:
n: 该Cursor所定义的数据已完全从表中读人,
n为全部的数据行。
-m: 该Cursor所定义的数据未完全从表中读人,
m为目前Cursor数据子集内的数据行。
0:无符合条件的数据或该Cursor已被关闭或释放。
-1:该游标为动态的,数据行经常变动无法确定。

例: declare AA_cursor cursor keyset for select * from AA
open AA_cursor
if @@error=0
begin
print‘游标打开成功‘
if @@cursor_rows>0
print ‘游标结果集内记录数为:‘+convert(varchar(3),@@cursor_rows)
end
close AA_cursor
deallocate AA_cursor

注意: 指定当游标打开时,游标中行的成员资格和顺序已经固定。
对行进行唯一标识的键集内置在 tempdb 内一个称为 keyset
的表中。对基表中的非键值所做的更改(由游标所有者更改或
由其它用户提交)在用户滚动游标时是可视的。其他用户进行
的插入是不可视的(不能通过 Transact-SQL 服务器游标进行
插入)。如果某行已删除,则对该行的提取操作将返回
@@FETCH_STATUS 值 -2。从游标外更新键值类似于删除旧行后
接着插入新行的操作。含有新值的行不可视,对含有旧值的行
的提取操作将返回@@FETCH_STATUS 值 -2。如果通过指定
WHERE CURRENT OF子句用游标完成更新,则新值可视。

3.从游标中提取数据:
声明一个游标后,并打开成功,就可以使用 Fetch 来从游标中提取数据。
语法: fetch (first / last / prior /next /
absolute[n/@nvar] / relative[n/@nvar])
from 游标名称 [into] 数量名 [……n]

时间: 2024-10-13 01:05:14

游标cursor 与循环fetch的相关文章

MySql使用游标Cursor循环(While)更新数据

#要修改的变量 DECLARE var_ID VARCHAR(50) DEFAULT ''; #需要修改的数据的数量 DECLARE var_UpdateCount INT; #当前循环次数 DECLARE var_WhileTimes INT; #定义游标 DECLARE var_Cur CURSOR FOR SELECT id FROM table_Name; #打开游标 OPEN var_Cur; #将游标的数据进行赋值 FETCH var_Cur INTO var_ID; #获取循环次数

SQL Server 数据库的维护(四)__游标(cursor)

--维护数据库-- --游标(cursor)-- --概述: 注:使用select语句查询结果的结果集是一个整体,如果想每次处理一行或一部分行数据,游标可以提供这种处理机制.可以将游标理解为指针.指针指向哪条记录,哪条记录即是被操作记录. 游标处理结果集的方式: 1)允许定位在结果集的指定位置行. 2)从结果集的当前位置检索一行或一部分行记录. 3)支持对结果集当前位置做数据修改.删除等操作. --使用游标 注:使用游标定位和操作数据记录的一般步骤为:声明游标.打开游标.抽取数据.关闭游标和释放

学习使用MS SQL Server游标(CURSOR)

说实的,使用MS SQL Server这样久,游标一直没有使用过.以前实现相似的功能,都是使用WHILE循环加临时表来实现.刚才有参考网上示例练习写了一下.了解到游标概念与语法.下面代码示例中,先是宣告你在游标中需使用变量,也就是临时存储处理字段的数据.2. 宣告一个游标,并SELECT需要处理的数据集.3. 打开游标(#8行代码).4. 从游标中拿来FETCH NEXT 数据给变量赋值.5. 循环@@FETCH_STATUS = 0条件.6. 在循环块,可以处理第一笔的记录逻辑了.本示例中是P

PL/SQL 04 游标 cursor

--游标 declare  cursor 游标名字  is  查询语句;begin  其他语句;end; --游标的属性%FOUND%NOTFOUND%ISOPEN%ROWCOUNT(当前游标的指针位移量) --FETCH的两种形式FETCH cursor_name INTO var1, var2, -;FETCH cursor_name INTO record_var; --游标的FETCH循环LOOP  FETCH cursor INTO-  EXIT WHEN cursor%NOTFOUN

ORACLE中的游标Cursor总结

游标(Cursor):用来查询数据库,获取记录集合(结果集)的指针,可以让开发者一次访问一行结果集,在每条结果集上作操作. 游标可分为: 1.       静态游标:分为显式(explicit)游标和隐式(implicit)游标. 2.       REF游标:是一种引用类型,类似于指针. 1.静态游标 1.1显式游标 定义格式: CURSOR 游标名 ( 参数 )  IS Select 语句 FOR UPDATE [OF [schema.]table.column[,[schema.]tabl

游标cursor:(循环操作批量数据)

declare cursor stus_cur is select * from students;  --定义游标并且赋值(is 不能和cursor分开使用) cur_stu students%rowtype;                  --定义rowtype begin open stus_cur;                            --开启游标 loop                                   --loop循环 exit when s

Oracle游标 CURSOR实例详解

作者:gqk 游标 CURSOR: 一.游标概述: 游标(cursor)是数据库系统在内存中开设的一个数据缓冲区,存放SQL语句的执行结果. 每个游标都有一个名字,用户可以用SQL语句逐一从游标中获取记录,并赋给变量做进一步处理. 作用:用于定位结果集的行 和 遍历结果集. 二.游标分类: 显式游标:在前述程序中用到的SELECT...INTO...查询语句,一次只能从数据库中提取一行数据,对于这种形式的查询和DML操作,系统都会使用一个隐式游标 隐式游标:但是如果要提取多行数据,就要由程序员定

分组PARTITION BY及游标CURSOR的用法

基础数据表: select * from dbo.RecommendationChanelVersionRelation: 数据如下: 要求按照ChannelVersionID分组,对每组中的OrderId根据ID由小到大的顺序,更新为1,2,3,4,5... 方法一(分组PARTITION BY): IF OBJECT_ID('tempdb..#tempdt') IS NOT NULLDROP TABLE #tempdt;select RowNumOrderByChannelVersionID

MySQL游标(cursor) 定义及使用

概念 游标(Cursor)它使用户可逐行访问由SQL?Server返回的结果集.?使用游标(cursor)的一个主要的原因就是把集合操作转换成单个记录处理方式. 用SQL语言从数据库中检索数据后,结果放在内存的一块区域中,且结果往往是一个含有多个记录的集合. 游标机制允许用户在SQL?server内逐行地访问这些记录,按照用户自己的意愿来显示和处理这些记录. 优点 1.允许程序对由查询语句select返回的行集合中的每一行执行相同或不同的操作,而不是对整个行集合执行同一个操作. 2.提供对基于游