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

选择合适的游标类型

 
阅读更多

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

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

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

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

<o:p> </o:p>

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

<o:p> </o:p>

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

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

SET NOCOUNT ON <o:p></o:p>

-- 建立测试环境<o:p></o:p>

DECLARE @tb TABLE(<o:p></o:p>

    id int<o:p></o:p>

        PRIMARY KEY)<o:p></o:p>

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

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

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

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

<o:p> </o:p>

-- 游标处理<o:p></o:p>

DECLARE tb CURSOR LOCAL FAST_FORWARD<o:p></o:p>

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

SELECT id FROM @tb<o:p></o:p>

DECLARE @id int<o:p></o:p>

OPEN tb<o:p></o:p>

FETCH tb INTO @id<o:p></o:p>

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

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

    PRINT @id<o:p></o:p>

    UPDATE @tb SET<o:p></o:p>

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

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

    FETCH tb INTO @id<o:p></o:p>

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

CLOSE tb<o:p></o:p>

DEALLOCATE tb<o:p></o:p>

 
分享到:
评论

相关推荐

    ASP技术常遇问题解答-如何定义记录集打开的游标类型?.zip

    在ASP(Active Server Pages)开发过程中,记录集(Recordset)是访问数据库数据的一个关键对象。游标(Cursor)在数据库操作中起着至关...在实际开发中,应根据应用的具体场景和性能要求,明智地选择合适的游标类型。

    Oracle 游标使用大全

    - 选择合适的游标类型,隐式游标适用于简单操作,显式游标适合复杂情况。 以上只是对Oracle游标使用的一个简要概述,具体到《Oracle 游标使用大全》这份文档,可能会包含更详尽的示例、技巧和案例,帮助开发者更好...

    游标卡尺的使用.ppt

    在测量前,需要确保游标卡尺的准确性和清洁度,然后选择合适的测量方式和单位。在实际测量过程中,需要将游标卡尺与被测量的物体对齐,然后将游标尺滑动到被测量的物体的边缘,最后读取测量结果。 三、游标卡尺的...

    sql游标的运用.txt

    ### SQL游标的运用 在SQL中,游标(Cursor)是一种强大的工具,允许用户逐行...选择合适的数据类型对于优化数据库性能和存储空间至关重要。正确的数据类型不仅可以减少存储空间的需求,还能提高查询效率和数据完整性。

    Oracle存储过程实例使用显示游标

    1. **声明游标**:定义游标的类型,包括要查询的表或视图以及选择的列。 2. **打开游标**:执行查询,准备游标处理数据。 3. **提取数据**:使用`FETCH`语句从游标中获取一行数据。 4. **处理数据**:在循环中对提取...

    plsql 游标 英文讲义

    游标(Cursor)是数据库编程中的一个重要概念,它为数据库查询操作提供了一种能够逐行处理结果集的机制。...在实际应用中,开发者需要根据实际需求来选择合适的游标类型,以实现最高效的数据处理过程。

    14.SQL游标概览.doc

    不同的游标类型具有不同的移动特性: - **滚动游标**(Scrolling Cursor):允许指针在结果集中向前或向后移动。例如,可以使用`NEXT`、`PREVIOUS`、`FIRST`、`LAST`和`ABSOLUTE`等关键字。 - **顺序游标**...

    游标的应用

    每种游标类型都有其特定的性能和功能特点: 1. 只进游标:这是默认的游标类型,只能向前移动,不能后退。它具有较高的性能,但限制了对结果集的操作。 2. 静态游标:一次性加载所有数据,并保持结果集不变,即使源...

    Sybase与SQL数据库游标心得

    例如,Sybase支持的游标类型可能比SQL Server更全面,而SQL Server的游标可能更注重易用性和性能优化。在实际应用中,开发者需要根据项目需求选择合适的数据库系统,并理解它们在游标管理上的异同。 最后,关于...

    oracle关于游标的相关文档

    Oracle中的游标是PL/SQL编程中的重要概念,主要用于处理SQL查询返回的多行结果集。游标允许程序逐行处理结果集,提供了...在实际开发中,根据需求选择合适的游标类型和使用方式,可以有效地管理和操作数据库中的数据。

    SQL游标

    SQL游标是数据库管理系统中一个重要的概念,尤其在SQL Server中,它允许用户按需处理数据集中的每一行。...在使用游标时,应充分理解其工作原理,并根据实际需求选择最适合的游标类型,以确保代码的高效性和可维护性。

    Sql中游标和加锁的问题

    在实际编程中,选择合适的游标和加锁策略是非常关键的。adOpenStatic游标常用于数据分析,因为它能提供一个固定的记录集,而adOpenKeyset游标则适合需要查看数据变化的情况。悲观锁定在并发环境低时较为合适,因为它...

    Oracle 游标使用大全.txt

    ### Oracle游标使用详解 #### 一、Oracle游标简介 在Oracle数据库中,游标是一种重要的机制,用于...在实际应用中,应该根据具体的需求选择合适的游标类型,并且要注意正确处理各种异常情况,以确保程序的稳定运行。

    Oracle 游标循环

    ### Oracle游标循环详解 #### 一、引言 在Oracle数据库编程中,游标是一种非常重要的机制,用于处理查询结果集。...在实际应用中,开发者可以根据具体需求选择合适的循环方式来优化代码结构和提高开发效率。

    第15章 游标的创建与使用.ppt

    游标在数据库编程中扮演着至关重要的角色,尤其是在Oracle数据库管理系统中。游标,顾名思义,就像指针一样,...在实际应用中,根据需求选择合适的游标类型,并正确管理游标状态,可以极大地提高代码的效率和可维护性。

    SQL_入门级范例_游标_触发器_多表联查_事物

    每种连接方式都有其特定的应用场景,选择合适的联查方式能有效地提高数据检索的效率和准确性。 最后,我们要讨论的是事务。事务是数据库操作的逻辑单元,包含一组必须一起成功完成或一起回滚的操作。事务确保了...

    C#对于Oracle游标一般处理程序速度的测试

    1. 游标类型:Oracle提供多种游标类型,如隐式游标(默认)、显式游标、REF CURSOR等。测试不同类型的游标在处理相同数据量时的速度差异。 2. 缓存大小:调整OracleDataReader的缓冲区大小,看看是否能提升读取速度...

    SQL语句游标For.Loop与Open.Close比较

    在数据库编程中,游标(Cursor)是一种非常重要的工具,它允许我们逐行处理查询结果。在Oracle SQL中,有多种方法来操作游标,包括使用`FOR...在实际开发中,应根据项目需求来平衡这些因素,选择最合适的游标处理方法。

    Qcustormplot 实现鼠标框选 放大缩小 拖拽 游标显示及吸附

    通过调用`setMouseWheelZoom()`方法,我们可以选择合适的缩放模式。同时,可以通过`zoomIn()`和`zoomOut()`方法实现一键缩放。 拖拽功能则是通过改变视口的位置来实现。当鼠标按下并在图表区域内移动时,我们需要...

    oracle游标实例

    Oracle游标是数据库管理系统中处理查询结果的一种方法,它允许我们逐行处理数据,而不仅仅是一次性获取所有结果。在Oracle中,游标分为隐式游标...在实际开发中,根据需求选择合适的游标类型可以有效地管理数据库交互。

Global site tag (gtag.js) - Google Analytics