选择合适的游标类型

原创 2007年05月12日 17:27:00

背景:

定义游标的时候, 如果不指定STATIC 关键字的时候, 则默认定义的游标是动态(DYNAMIC)

动态(DYNAMIC) 游标会反映在滚动游标时对结果集内的各行所做的所有数据更改。行的数据值、顺序和成员身份在每次提取时都会更改。动态游标不支持ABSOLUTE 提取选项。

因为动态游标会消耗资源去检查基础表的更新, 所以对于复杂的查询, 且不需要反映基础表更新情况的游标处理中, 将游标定义为静态的。另外,还有一种 KEYSET 类型的游标,它的行为介于动态和静态游标之间。

 

在笔者遇到的一个案例中, 使用动态游标的处理会花费分钟, 而改为静态游标后, 处理时间只需要1 秒钟, 效率的差异非常明显

 

另外, 在使用 DYNAMIC 游标的时候, 必须注意“行的数据值、顺序和成员身份在每次提取时都会更改”的问题。

下面是一个看似正常, 但实际执行会造成死循环的示例

SET NOCOUNT ON

-- 建立测试环境

DECLARE @tb TABLE(

    id int

        PRIMARY KEY)

INSERT @tb(

    id)

SELECT id = 1 UNION ALL

SELECT id = 2

 

-- 游标处理

DECLARE tb CURSOR LOCAL FAST_FORWARD

FOR

SELECT id FROM @tb

DECLARE @id int

OPEN tb

FETCH tb INTO @id

WHILE @@FETCH_STATUS = 0

BEGIN

    PRINT @id

    UPDATE @tb SET

        id = id + 2

    WHERE id = @id

    FETCH tb INTO @id

END

CLOSE tb

DEALLOCATE tb

 

认识静态与动态游标

背景:静态(STATIC)游标创建将由该游标使用的数据的临时复本。对游标的所有请求都从tempdb 中的这一临时表中得到应答;因此,在对该游标进行提取操作时返回的数据中不反映对基表所做的修改,并且该游...
  • zjcxc
  • zjcxc
  • 2007年05月12日 17:23
  • 6238

Oracle动态游标的使用

Oracle动态游标的使用 游标的概念:     游标是SQL的一个内存工作区,由系统或用户以变量的形式定义。游标的作用就是用于临时存储从数据库中提取的数据块。在某些情况下,需要把数据从存放在磁盘的...
  • gh320
  • gh320
  • 2014年01月04日 19:11
  • 2699

游标的使用方法

游标的学习 1. 声明游标就是为了定义一个游标名称来对应一条查询语句,然后对这个查询结果集进行单行操作 声明语句在单个使用的时候需要在declare子句中进行,在存储过程中便是...
  • newMyStyle
  • newMyStyle
  • 2016年01月14日 23:25
  • 2274

oracle中函数,游标的使用

oracle中函数和游标的使用 --创建函数并且调用 create function fun1(v_in_ename varchar2) return number is v_annual_sal ...
  • zhengqiqiqinqin
  • zhengqiqiqinqin
  • 2013年06月14日 23:01
  • 6988

Oracle游标的使用方法以及使用for循环实现游标的原理

select * from tb_grade t for update    --1普通游标(显示游标)    declare    --定义游标 用于查询表结构的数据集    cursor ...
  • t0404
  • t0404
  • 2016年07月01日 23:44
  • 1198

mysql中游标的使用案例详解(学习笔记)

1.游标是啥玩意? 简单的说:游标(cursor)就是游动的标识,啥意思呢,通俗的这么说,一条sql取出对应n条结果资源的接口/句柄,就是游标,沿着游标可以一次取出一行。我给大家准备一张图: ...
  • xushouwei
  • xushouwei
  • 2016年08月13日 20:20
  • 12579

MySql中游标的定义与使用方式

创建游标 首先在MySql中创建一张数据表: CREATE TABLE IF NOT EXISTS `store` ( `id` int(11) NOT NULL AUTO_INCREMENT, ...
  • liguo9860
  • liguo9860
  • 2016年03月10日 18:42
  • 24576

MySql中游标的定义与使用方式

创建游标 首先在MySql中创建一张数据表: [sql] view plain copy   CREATE TABLE IF NOT EXISTS ...
  • Happy_wu
  • Happy_wu
  • 2016年11月27日 20:39
  • 1000

mysql中游标的运用

游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制;游标充当指针的作用;尽管游标能遍历结果中的所有行,但他一次只指向一行。...
  • u013030601
  • u013030601
  • 2016年12月27日 16:14
  • 3016

ORACLE游标概念讲解

1.什么是游标?  从表中检索出结果集,从中每次指向一条记录进行交互的机制。      用来管理从数据源返回的数据的属性(结果集)。这些属性包括并发管理、在结果集中的位置、返回的行数,以及是否能够在结...
  • qq877507054
  • qq877507054
  • 2016年10月21日 19:02
  • 947
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:选择合适的游标类型
举报原因:
原因补充:

(最多只允许输入30个字)