认识静态与动态游标

原创 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

 

选择合适的游标类型

背景:定义游标的时候, 如果不指定STATIC 关键字的时候, 则默认定义的游标是动态(DYNAMIC) 的动态(DYNAMIC) 游标会反映在滚动游标时对结果集内的各行所做的所有数据更改。行的数据值...
  • zjcxc
  • zjcxc
  • 2007年05月12日 17:27
  • 7909

【Oracle】PL/SQL 显式游标、隐式游标、动态游标

在PL/SQL块中执行SELECT、INSERT、DELETE和UPDATE语句时,ORACLE会在内存中为其分配上下文区(Context Area),即缓冲区。游标是指向该区的一个指针,或是命名一个...
  • vking_wang
  • vking_wang
  • 2013年06月17日 09:02
  • 11230

Oracle动态游标的使用

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

动态游标(例如表名作为参数)以及动态SQL分析

表名作为参数的动态游标 DECLARE v_table_name VARCHAR2(30) := 'CUX_MES_WIP_BARCODE_MAP'; --l_rec SY...
  • caixingyun
  • caixingyun
  • 2014年08月07日 17:29
  • 3575

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

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

oracle 管道函数+动态游标

  • 2013年12月17日 13:36
  • 1KB
  • 下载

SQLSREVER如何创建和使用动态游标

  • 2009年09月13日 16:03
  • 42KB
  • 下载

『ORACLE』 PLSQL动态游标的使用(11g)

#静态游标指的是程序执行的时候不需要再去解析sql语言,对于sql语句的解析在编译的时候就可以完成的。 动态游标由于含有参数,对于sql语句的解析必须要等到参数确定的时候才能完成。 从这个...
  • qq_38815172
  • qq_38815172
  • 2017年05月16日 21:56
  • 148

动态游标(REF CURSOR)

 动态游标(REF CURSOR)  首先 , 游标变量和游标是两个不同的概念 . 与游标相似 , 游标变量是指向多行游标查询的结果集的当前行 . 游标是静态的 , 游标变量是动态的 ,. 同...
  • gh320
  • gh320
  • 2013年12月18日 15:10
  • 703

Oracle REF动态游标

REF动态游标被用于处理多行的查询结果集 在同一个PLSQL块当中,REF动态游标不同于特定的查询绑定 打开游标时才绑定,所以通常用于查询语句需要运行时动态确定的情况 使...
  • hlx20080808
  • hlx20080808
  • 2017年05月17日 16:46
  • 130
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:认识静态与动态游标
举报原因:
原因补充:

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