请教大虾们,反复执行同一个游标(cursor),每次从表中取出1000条,直到将表中的数据取完;

请教大虾们,反复执行同一个游标(cursor),每次从表中取出1000条,直到将表中的数据取完;,第1张

据我理解,游标并不太占资源。就fetch一条

如果你做处理的时候,怕影响其他用户读数据,你可以分批处理,比如说处理这个月的数据。

如果不影响其他用户,反正是所有的处理都一次完成,只是你的方法比较复杂。

在数据库中,游标是一个十分重要的概念。游标提供了一种对从表中检索出的数据进行 *** 作的灵活手段,就本质而言,游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。游标总是与一条SQL 选择语句相关联因为游标由结果集(可以是零条、一条或由相关的选择语句检索出的多条记录)和结果集中指向特定记录的游标位置组成。当决定对结果集进行处理时,必须声明一个指向该结果集的游标。如果曾经用 C 语言写过对文件进行处理的程序,那么游标就像您打开文件所得到的文件句柄一样,只要文件打开成功,该文件句柄就可代表该文件。对于游标而言,其道理是相同的。可见游标能够实现按与传统程序读取平面文件类似的方式处理来自基础表的结果集,从而把表中数据以平面文件的形式呈现给程序。

我们知道关系数据库管理系统实质是面向集合的,在MS SQL SERVER 中并没有一种描述表中单一记录的表达形式,除非使用where 子句来限制只有一条记录被选中。因此我们必须借助于游标来进行面向单条记录的数据处理。由此可见,游标允许应用程序对查询语句select 返回的行结果集中每一行进行相同或不同的 *** 作,而不是一次对整个结果集进行同一种 *** 作;它还提供对基于游标位置而对表中数据进行删除或更新的能力;而且,正是游标把作为面向集合的数据库管理系统和面向行的程序设计两者联系起来,使两个数据处理方式能够进行沟通。

在数据库开发过程中,当你检索的数据只是一条记录时,你所编写的事务语句代码往往使用SELECT INSERT 语句。但是我们常常会遇到这样情况,即从某一结果集中逐一地读取一条记录。那么如何解决这种问题呢?游标为我们提供了一种极为优秀的解决方案——那就是使用游标。

一个数据库里面可以同时执行多个游标的,所谓的游标嵌套就是很好的例子。

declare

cursor c1 is

select * from table1

cursor c2(n_id number) is

select * from table2 where table1_id=n_id

begin

for my_c1 in c1 loop

for my_c2 in c2(my_c1.id) loop

.....................

end loop

end loop

end

/


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6762476.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-27
下一篇 2023-03-27

发表评论

登录后才能评论

评论列表(0条)

保存