静态(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>
下面的演示针对 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是指在PL/SQL中直接运行的SQL语句,没有什么特别之处。动态SQL则是指利用EXECUTE IMMEDIATE语句执行的SQL...
- 从动态游标中读取数据与显式游标相同,使用`FETCH`语句。 - 关闭动态游标同样使用`CLOSE`语句。 在实际应用中,比如有一个名为`student`的表,包含学号`xh`和科目`kc`,可以使用游标处理多个科目信息。如果要...
SQL Server 中创建和使用动态游标的技术要点 在 SQL Server 中,创建和使用动态游标是一种高效的数据处理方式。本文将详细介绍如何创建和使用动态游标,包括存储过程的设计、游标的创建、数据的插入和查询等方面的...
根据提供的Oracle管道函数和动态游标的代码片段及描述,我们可以深入了解其背后的技术要点与实现细节。下面将逐一解析这些知识点。 ### Oracle管道函数 管道函数(Pipe-lined Function)是Oracle中一种特殊类型的...
### DB2游标及动态SQL详解 #### 一、DB2游标概念与使用 **1.1 游标简介** 在DB2中,游标是一种用于遍历查询结果集的强大工具。它允许用户一行一行地处理数据,这对于需要逐行处理数据的应用场景非常有用。游标通常...
- 静态游标:分为隐式和显式两种。隐式游标由Oracle自动管理,无需声明,每次DML操作后都可以使用。显式游标需要声明游标变量,并按照步骤执行,提供更多的控制。 - 动态游标:允许在运行时改变SQL查询,适应不同...
本文将深入解析“游标动态数据库代码”这一主题,重点围绕游标在动态数据库操作中的应用,通过解析给定的描述和部分内容,详细介绍游标的声明、打开、执行、获取数据以及关闭等关键步骤,并探讨其在PL/SQL中的具体...
Oracle 游标可以分为两类:静态游标和动态游标。 1. 静态游标:静态游标是使用 cursor...is 语句定义的游标,它可以对查询语句(select)返回的多条记录进行处理。 2. 动态游标:动态游标是在运行期间传递参数来...
动态游标与静态游标的主要区别在于,动态游标的SQL查询语句是在运行时动态绑定的,而不是在定义时就固定的。这为程序提供了更大的灵活性。 动态游标的定义格式如下: ```plsql DECLARE TYPE cur_type IS REF ...
以动态游标的方式实现让数据库的内容分列显示,达到想要的显示效果
MySQL中的动态游标是数据库处理过程中非常有用的一个特性,它允许在存储过程中逐行处理查询结果。在本示例中,我们将深入探讨如何在MySQL中使用动态游标,特别是结合存储过程来实现这一功能。 首先,创建了一个名为...
REF 游标是动态关联结果集的临时对象。游标的状态是通过属性来表示,可以通过 %Found、%NotFound、%ISOpen、%RowCount 等属性来获取游标的状态。 在使用游标时,需要声明游标、打开游标、获取记录和关闭游标。声明...
关于游标使用问题的练习和答案。游标分隐式和显示游标;动态和ref游标。适用于初学者。
动态SQL指的是在运行时构造SQL语句,动态游标则是用来执行这些动态SQL语句的游标。这种技术在需要根据不同条件执行不同SQL语句时非常有用。但是,动态SQL和动态游标的使用需要谨慎,因为它们可能会引发一些安全问题...
隐式游标的所有属性与显式游标相同,但不需要显式声明和管理。以下是一个隐式游标示例,用于查找特定卡片的所有者: ```sql DECLARE name VARCHAR2(20); ownername VARCHAR2(10); BEGIN SELECT name, ownername ...
- API 服务器游标:这类游标在服务器端运行,包括静态游标、动态游标、只进游标和键集驱动游标。 - 静态游标:一次性加载所有结果到内存,不反映数据的实时变化,只读且不显示新插入的行。 - 动态游标:实时反映...
5. **交互性**:波形图的游标不仅提供静态的读数,还支持动态交互。例如,在实时监测或数据流应用中,游标可以随着数据的变化自动跟踪,从而实时反映出信号的状态。 6. **游标事件**:LabVIEW提供了游标事件处理...
在Sybase中,我们可以创建四种类型的游标:静态、动态、键集驱动和只读。静态游标在声明时就确定了结果集,不响应数据的更改;动态游标则实时反映数据库的改变;键集驱动游标类似于静态游标,但只保存结果集中行的键...
1. **声明(DECLARE)**:声明游标时,我们需要指定游标的名称、游标的类型(如静态、动态、快照等),以及游标将基于的SQL查询。例如: ```sql DECLARE my_cursor1 CURSOR FOR SELECT rowid, title FROM tempTab...
【游标管理】是数据库操作中的一个重要概念,尤其在处理大量数据时,游标提供了一种灵活的方式。游标允许程序逐行处理查询结果,而不是一次性处理整个结果集,这在需要对每行数据进行不同操作或者需要多次访问数据时...