`
逆风的香1314
  • 浏览: 1431902 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

认识静态与动态游标

 
阅读更多

背景:<o:p></o:p>

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

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

不指定STATIC 关键字的时候, 默认定义的游标是动态(DYNAMIC) <o:p></o:p>

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

<o:p> </o:p>

演示:<o:p></o:p>

下面的演示针对 STATIC DYNAMIC 游标, 显示两者在游标循环期的差异<o:p></o:p>

-- 定义演示数据<o:p></o:p>

IF OBJECT_ID('tempdb..#tb') IS NOT NULL<o:p></o:p>

    DROP TABLE #tb<o:p></o:p>

CREATE TABLE #tb(<o:p></o:p>

    id int PRIMARY KEY,<o:p></o:p>

    col sysname)<o:p></o:p>

INSERT #tb(<o:p></o:p>

    id, col)<o:p></o:p>

SELECT 1, 'AA' <st1:place w:st="on">UNION</st1:place> ALL<o:p></o:p>

SELECT 2, 'BB' <st1:place w:st="on">UNION</st1:place> ALL<o:p></o:p>

SELECT 3, 'CC' <st1:place w:st="on">UNION</st1:place> ALL<o:p></o:p>

SELECT 4, 'DD'<o:p></o:p>

<o:p> </o:p>

-- 游标测试<o:p></o:p>

DECLARE CUR_tb CURSOR LOCAL FORWARD_ONLY READ_ONLY TYPE_WARNING DYNAMIC--STATIC<o:p></o:p>

FOR           <o:p></o:p>

SELECT <o:p></o:p>

    id, col<o:p></o:p>

FROM #tb<o:p></o:p>

<o:p> </o:p>

-- 游标打开前删除记录<o:p></o:p>

DELETE TOP (1)<o:p></o:p>

FROM #tb<o:p></o:p>

WHERE id = 4<o:p></o:p>

SELECT 'before cursor open', * FROM #tb<o:p></o:p>

<o:p> </o:p>

-- 打开游标<o:p></o:p>

OPEN CUR_tb<o:p></o:p>

<o:p> </o:p>

-- 游标打开后删除记录<o:p></o:p>

DELETE TOP (1)<o:p></o:p>

FROM #tb<o:p></o:p>

WHERE id = 3<o:p></o:p>

SELECT 'after cursor open', * FROM #tb<o:p></o:p>

FETCH CUR_tb<o:p></o:p>

WHILE @@FETCH_STATUS = 0<o:p></o:p>

BEGIN<o:p></o:p>

    -- 游标循环中删除记录<o:p></o:p>

    DELETE TOP (1)<o:p></o:p>

    FROM #tb<o:p></o:p>

    WHERE id = 2<o:p></o:p>

<o:p> </o:p>

    FETCH CUR_tb<o:p></o:p>

END<o:p></o:p>

CLOSE CUR_tb<o:p></o:p>

DEALLOCATE CUR_tb<o:p></o:p>

 
分享到:
评论

相关推荐

    静态、动态sql及各种游标

    静态、动态SQL及各种游标 静态SQL和动态SQL是两种不同的SQL语句执行方式,分别应用于不同的场景中。静态SQL是指在PL/SQL中直接运行的SQL语句,没有什么特别之处。动态SQL则是指利用EXECUTE IMMEDIATE语句执行的SQL...

    ORACLE显式游标和动态游标的使用.pdf

    - 从动态游标中读取数据与显式游标相同,使用`FETCH`语句。 - 关闭动态游标同样使用`CLOSE`语句。 在实际应用中,比如有一个名为`student`的表,包含学号`xh`和科目`kc`,可以使用游标处理多个科目信息。如果要...

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

    SQL Server 中创建和使用动态游标的技术要点 在 SQL Server 中,创建和使用动态游标是一种高效的数据处理方式。本文将详细介绍如何创建和使用动态游标,包括存储过程的设计、游标的创建、数据的插入和查询等方面的...

    oracle 管道函数+动态游标

    根据提供的Oracle管道函数和动态游标的代码片段及描述,我们可以深入了解其背后的技术要点与实现细节。下面将逐一解析这些知识点。 ### Oracle管道函数 管道函数(Pipe-lined Function)是Oracle中一种特殊类型的...

    DB2游标及动态SQL

    ### DB2游标及动态SQL详解 #### 一、DB2游标概念与使用 **1.1 游标简介** 在DB2中,游标是一种用于遍历查询结果集的强大工具。它允许用户一行一行地处理数据,这对于需要逐行处理数据的应用场景非常有用。游标通常...

    Oracle封锁及动态游标技术分析与应用.pdf

    - 静态游标:分为隐式和显式两种。隐式游标由Oracle自动管理,无需声明,每次DML操作后都可以使用。显式游标需要声明游标变量,并按照步骤执行,提供更多的控制。 - 动态游标:允许在运行时改变SQL查询,适应不同...

    游标动态数据库代码

    本文将深入解析“游标动态数据库代码”这一主题,重点围绕游标在动态数据库操作中的应用,通过解析给定的描述和部分内容,详细介绍游标的声明、打开、执行、获取数据以及关闭等关键步骤,并探讨其在PL/SQL中的具体...

    oracle游标的总结oracle游标的总结

    Oracle 游标可以分为两类:静态游标和动态游标。 1. 静态游标:静态游标是使用 cursor...is 语句定义的游标,它可以对查询语句(select)返回的多条记录进行处理。 2. 动态游标:动态游标是在运行期间传递参数来...

    Oracle数据库的游标学习总结

    动态游标与静态游标的主要区别在于,动态游标的SQL查询语句是在运行时动态绑定的,而不是在定义时就固定的。这为程序提供了更大的灵活性。 动态游标的定义格式如下: ```plsql DECLARE TYPE cur_type IS REF ...

    动态游标实现数据内容分列显示

    以动态游标的方式实现让数据库的内容分列显示,达到想要的显示效果

    mysql动态游标学习(mysql存储过程游标)

    MySQL中的动态游标是数据库处理过程中非常有用的一个特性,它允许在存储过程中逐行处理查询结果。在本示例中,我们将深入探讨如何在MySQL中使用动态游标,特别是结合存储过程来实现这一功能。 首先,创建了一个名为...

    Oracle存储过程游标详解

    REF 游标是动态关联结果集的临时对象。游标的状态是通过属性来表示,可以通过 %Found、%NotFound、%ISOpen、%RowCount 等属性来获取游标的状态。 在使用游标时,需要声明游标、打开游标、获取记录和关闭游标。声明...

    oracle游标练习答案

    关于游标使用问题的练习和答案。游标分隐式和显示游标;动态和ref游标。适用于初学者。

    oracle数据库的游标

    动态SQL指的是在运行时构造SQL语句,动态游标则是用来执行这些动态SQL语句的游标。这种技术在需要根据不同条件执行不同SQL语句时非常有用。但是,动态SQL和动态游标的使用需要谨慎,因为它们可能会引发一些安全问题...

    存储过程 游标

    隐式游标的所有属性与显式游标相同,但不需要显式声明和管理。以下是一个隐式游标示例,用于查找特定卡片的所有者: ```sql DECLARE name VARCHAR2(20); ownername VARCHAR2(10); BEGIN SELECT name, ownername ...

    SQL 游标详细介绍

    - API 服务器游标:这类游标在服务器端运行,包括静态游标、动态游标、只进游标和键集驱动游标。 - 静态游标:一次性加载所有结果到内存,不反映数据的实时变化,只读且不显示新插入的行。 - 动态游标:实时反映...

    波形图游标功能_获取游标_

    5. **交互性**:波形图的游标不仅提供静态的读数,还支持动态交互。例如,在实时监测或数据流应用中,游标可以随着数据的变化自动跟踪,从而实时反映出信号的状态。 6. **游标事件**:LabVIEW提供了游标事件处理...

    Sybase与SQL数据库游标心得

    在Sybase中,我们可以创建四种类型的游标:静态、动态、键集驱动和只读。静态游标在声明时就确定了结果集,不响应数据的更改;动态游标则实时反映数据库的改变;键集驱动游标类似于静态游标,但只保存结果集中行的键...

    SQL Server 游标用法

    1. **声明(DECLARE)**:声明游标时,我们需要指定游标的名称、游标的类型(如静态、动态、快照等),以及游标将基于的SQL查询。例如: ```sql DECLARE my_cursor1 CURSOR FOR SELECT rowid, title FROM tempTab...

    数据库原理与运用(游标管理)

    【游标管理】是数据库操作中的一个重要概念,尤其在处理大量数据时,游标提供了一种灵活的方式。游标允许程序逐行处理查询结果,而不是一次性处理整个结果集,这在需要对每行数据进行不同操作或者需要多次访问数据时...

Global site tag (gtag.js) - Google Analytics