认识静态与动态游标

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

背景:

静态(STATIC)游标创建将由该游标使用的数据的临时复本。对游标的所有请求都从tempdb 中的这一临时表中得到应答;因此,在对该游标进行提取操作时返回的数据中不反映对基表所做的修改,并且该游标不允许修改

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

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

如果很在意游标的类型, 应该在定义游标的时候, 加上游标类型定义的关键字, 并加上TYPE_WARNING 关键字, 以便在游标类型不是预期的情况下, 收到警告信息

 

演示:

下面的演示针对 STATIC DYNAMIC 游标, 显示两者在游标循环期的差异

-- 定义演示数据

IF OBJECT_ID('tempdb..#tb') IS NOT NULL

    DROP TABLE #tb

CREATE TABLE #tb(

    id int PRIMARY KEY,

    col sysname)

INSERT #tb(

    id, col)

SELECT 1, 'AA' UNION ALL

SELECT 2, 'BB' UNION ALL

SELECT 3, 'CC' UNION ALL

SELECT 4, 'DD'

 

-- 游标测试

DECLARE CUR_tb CURSOR LOCAL FORWARD_ONLY READ_ONLY TYPE_WARNING DYNAMIC--STATIC

FOR          

SELECT

    id, col

FROM #tb

 

-- 游标打开前删除记录

DELETE TOP (1)

FROM #tb

WHERE id = 4

SELECT 'before cursor open', * FROM #tb

 

-- 打开游标

OPEN CUR_tb

 

-- 游标打开后删除记录

DELETE TOP (1)

FROM #tb

WHERE id = 3

SELECT 'after cursor open', * FROM #tb

FETCH CUR_tb

WHILE @@FETCH_STATUS = 0

BEGIN

    -- 游标循环中删除记录

    DELETE TOP (1)

    FROM #tb

    WHERE id = 2

 

    FETCH CUR_tb

END

CLOSE CUR_tb

DEALLOCATE CUR_tb

 

静态游标和动态游标

静态游标在打开时会将数据集存储在tempdb中,因此显示的数据与游标打开时的数据集保持一致,在游标打开以后对数据库的更新不会显示在游标中。   动态游标在打开后会反映对数据库的更改。所有UPDAT...
  • liu_1983
  • liu_1983
  • 2012-01-17 23:33:42
  • 6007

数据库里面的游标,动态游标和静态游标区别

游标静态游标指的是程序执行的时候不需要再去解析sql语言,对于sql语句的解析在编译的时候就可以完成的。动态游标由于含有参数,对于sql语句的解析必须要等到参数确定的时候才能完成。从这个角度来说,静态...
  • shaniqng
  • shaniqng
  • 2016-12-08 19:28:18
  • 573

ORACLE静态游标

游标(cursor)是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果。每个游标区都有一个名字。用户可以用SQL语句逐一从游标中获取记录,并赋给主变量,交由主语言进一步处理。 游标,从dec...
  • zzy7075
  • zzy7075
  • 2014-12-25 17:36:34
  • 1677

游标、事务并发和锁三者之间的那点事

对数据库学习的不断深入,对游标的认识也在逐渐加深,游标与事务、锁有着密不可分的关系。 无论是事务、锁还是游标相对于数据库来说最主要目的是保证数据的完整性。对事务并发、锁定的深入学习才能更加完善对游标的...
  • jiuqiyuliang
  • jiuqiyuliang
  • 2012-08-10 17:22:40
  • 4912

认识静态与动态游标

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

游标的简单例子

游标的类型: 1、静态游标(不检测数据行的变化) 2、动态游标(反映所有数据行的改变) 3、仅向前游标(不支持滚动) 4、键集游标(能反映修改,但不能准确反映插入、删除) 游标使用顺序:...
  • u012110719
  • u012110719
  • 2014-11-22 19:19:00
  • 1434

Oracle 静态 动态游标的使用

declare       ida varchar(200);        a varchar(200);       b varchar(200);       c var...
  • u012377333
  • u012377333
  • 2014-07-25 11:09:56
  • 1160

认识静态与动态游标

背景:静态(STATIC)游标创建将由该游标使用的数据的临时复本。对游标的所有请求都从tempdb 中的这一临时表中得到应答;因此,在对该游标进行提取操作时返回的数据中不反映对基表所做的修改,并且该游...
  • techcrunch
  • techcrunch
  • 2008-01-03 14:32:00
  • 248

ORACLE动态游标实战举例

游标是数据库编程中必须要熟练掌握的技术,主要实现针对数据集合,进行循环处理,因为SQL本身只能一次性处理,所以当有稍微复杂的因为时,都在存储过程中使用游标进行实现。静态游标在执行前就能确定对应查询语句...
  • neweastsun
  • neweastsun
  • 2016-02-16 08:30:42
  • 3622

DB2存储过程写法介绍

  • 2011年05月27日 17:46
  • 115KB
  • 下载
收藏助手
不良信息举报
您举报文章:认识静态与动态游标
举报原因:
原因补充:

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