首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Oracle中的游标vs FOR循环

在Oracle数据库中,游标(Cursor)和FOR循环是两种不同的概念和用法。

  1. 游标(Cursor): 游标是一种数据库对象,用于在PL/SQL中处理查询结果集。它可以被视为一个指向查询结果集的指针,允许我们逐行处理结果集中的数据。游标通常用于处理大量数据或需要逐行处理数据的情况。

游标的分类:

  • 隐式游标:由Oracle自动创建和管理的游标,用于处理SELECT语句的结果集。
  • 显式游标:由开发人员显式声明和控制的游标,用于处理复杂的查询或需要手动控制结果集的情况。

游标的优势:

  • 允许逐行处理结果集,减少内存占用。
  • 可以在游标中使用WHERE子句、ORDER BY子句等对结果集进行筛选和排序。
  • 可以使用游标属性(如%FOUND、%NOTFOUND、%ROWCOUNT)获取结果集的状态信息。

游标的应用场景:

  • 处理大量数据:当需要处理大量数据时,游标可以逐行获取数据并进行相应的处理,避免一次性加载整个结果集。
  • 数据分析和报表生成:通过游标可以逐行处理查询结果,进行数据分析和生成报表。
  • 数据库游标的使用:https://cloud.tencent.com/document/product/248/11697
  1. FOR循环: FOR循环是一种常见的循环结构,用于在PL/SQL中重复执行一段代码块。它可以用于处理集合类型(如数组、记录)中的元素,也可以用于执行固定次数的循环。

FOR循环的语法:

代码语言:txt
复制
FOR loop_counter IN [REVERSE] lower_bound..upper_bound LOOP
    -- 循环体代码
END LOOP;

FOR循环的优势:

  • 简洁明了:FOR循环提供了一种简洁的语法,用于处理集合类型中的元素或执行固定次数的循环。
  • 自动迭代:FOR循环会自动迭代集合中的元素,无需手动控制循环变量的增减。
  • 可读性强:FOR循环的语法结构清晰,易于理解和维护。

FOR循环的应用场景:

  • 遍历集合类型:通过FOR循环可以方便地遍历数组、记录等集合类型中的元素。
  • 执行固定次数的循环:当需要执行固定次数的循环时,FOR循环是一种简洁有效的选择。

综上所述,游标和FOR循环在Oracle中是两种不同的概念和用法。游标用于处理查询结果集,允许逐行处理数据;而FOR循环用于重复执行一段代码块,可以处理集合类型中的元素或执行固定次数的循环。具体使用哪种方式取决于具体的需求和场景。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Oracle存储过程(while循环、for循环、if判断、sql拼接、游标

, 0为前者,1位后者:0 当前循环数值:3 当前取到字段:ID 当前未取到字段:YEAR_DATE,TIME, 0为前者,1位后者:1 当前循环数值:2 当前取到字段:YEAR_DATE 当前未取到字段...AND B1002.YEAR_DATE = Z.TIME 4 FOR循环 通过游标写一个简单FOR循环。...CREATE OR REPLACE PROCEDURE TEST AS --定义游标,取该表前10条记录(通过ID排序) CURSOR DATA IS SELECT * FROM (SELECT...,0为前者,1位后者 CALCULATED INT; --定义游标,取该表前50条记录(通过ID排序) CURSOR DATA IS SELECT * FROM (SELECT a....EXECUTE IMMEDIATE 执行动态语句,可以用于执行动态拼接好SQL。 CURSOR IS 游标,配合FRO使用。

44210

oracle游标 sql语句,sql游标

sql游标 游标的类型: 1、静态游标(不检测数据行变化) 2、动态游标(反映所有数据行改变) 3、仅向前游标(不支持滚动) 4、键集游标(能反映修改,但不能准确反映插入、删除) 游标使用顺序: 1...into 变量 把当前行各字段值赋值给变量 游标状态变量: @@fetch_status 游标状态 0 成功 -1 失败 -2 丢失 @@cursor_rows 游标结果集中行数 n 行数...-1 游标是动态 0 空集游标 操作游标的当前行: current of 游标名 以下例子,在SQL SERVER 2000 测试成功 use pubs go declare @auid char...auth_cur cursor for select au_id, au_lname, au_fname, state from authors open auth_cur fetc 相关文档: 1.Oracle...删除表多余重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小记录. delete from people where peopleId in (select peopleId

1.5K20
  • Oracle静态游标与动态游标

    前言 我们在写Oracle存储过程里面,经常会用到游标Oracle里面的游标分为静态游标和动态游标。今天我们在说一下分别有什么不同。...代码演示 使用背景 我们在存储过程输入开始和结束日期,用于查询开始到结束日期这一段时间内销售。 解决思路 这个查询我们就可以用到静态游标和动态游标的结合使用。...通过静态游标设置开始和结果日期获取到所涉及到的当前年月。 根据获取到的当前年月生成要查询对应月份分割表动态SQL语句。 用动态游标遍历,然后进行数据处理。 代码 ?...根据输入日期通过静态游标生成对应动态SQL语句。...vs_sSql是我们动态字符串,把主表查询先加进来,然后根据输入开始和结束日期找到对应月份分割表,然后判断表是否存在,如果存在的话就用union all把分割表加入到动态SQL语句里 ---- ?

    2.9K30

    【DB笔试面试576】在Oracle,简述Oracle游标

    ♣ 题目部分 在Oracle,简述Oracle游标。 ♣ 答案部分 在介绍游标之前先介绍一下Oracle数据库库缓存(Library Cache)作用及其组成结构。...由于库缓存对象句柄是以哈希表(Hash Table)方式存储在库缓存,哈希表就是很多Hash Bucket组成数组,所以,Oracle会通过相关哈希运算来存储和访问对应库缓存对象句柄。...例如,Oracle可以通过访问某个库缓存对象Heap 0Child table而依次顺序访问从属于该对象所有子库缓存对象。...Oracle会用Data Heap来存储这些动态运行时数据,所谓“Data Heap”,可以简单地理解成是库缓存一块连续内存区域,Data Heap是动态分配,其大小并不固定。...各个Data Heap之间是独立,没有关联关系,Oracle会在Heap 0属性“Data Blocks Pointer”存储指向这些Data Heap指针,这样Oracle通过访问Heap 0

    1.3K20

    【DB笔试面试578】在Oracle,什么是会话游标?会话游标和共享游标的区别有哪些?会话游标分为哪几类?

    Oracle会根据参数SESSION_CACHED_CURSORS值来决定是否将已经用过会话游标缓存在对应会话PGA。...联系1.会话游标是以哈希表方式缓存在PGA,意味着Oracle会通过相关哈希运算来存储和访问在当前会话PGA对应会话游标。...这种访问机制和共享游标是一样,可以简单地认为Oracle是根据目标SQLSQL文本哈希值去PGA相应Hash Bucket找匹配会话游标。...由于在缓存会话游标的哈希表对应Hash BucketOracle会存储目标SQL对应游标的库缓存对象句柄地址,所以,Oracle可以通过会话游标找到对应游标,进而就可以找到对应子游标目标...① 在Oracle 11gR2,一个会话游标能够被缓存在PGA必要条件是该会话游标所对应SQL解析和执行次数要超过3次。

    1.4K30

    MySQL游标

    什么是游标游标(cursor)是一个存储在MySQL服务器上数据库查询, 它不是一条SELECT语句,而是被该语句检索出来结果集。...这是因为游标的变量只保留了customers表第一行数据,如果要查看后面的数据,就需要循环往下移动游标,才能继续查看。...示例二 定义一个存储过程,调用存储过程时,将表customers里数据循环写入新表里面。...cus; 结果: 结果与customers里一致,但是这些结果是循环一条一条往下移动过程插入,即这个循环执行了7次。...以上就是游标的基本操作原理了,此外游标循环体还有WHILE,REPEAT等操作方式,他们操作方式与LOOP类似,都是用来循环执行循环体里面的内容,直到循环结束。

    40610

    【DB笔试面试577】在Oracle游标有哪几类?

    ♣ 题目部分 在Oracle游标有哪几类?...♣ 答案部分 游标(Cursor)是Oracle数据库SQL解析和执行载体,它可以分为共享游标(Shared Cursor)和会话游标(Session Cursor)。...共享游标Oracle缓存在库缓存几十种库缓存对象之一,它所对应库缓存对象句柄Namespace属性值是CRSR(也就是Cursor缩写)。...(3)在步骤(2),如果找到了匹配游标,那么Oracle接下来就会遍历从属于该父游标的所有子游标以查找匹配游标。...在匹配游标查找匹配游标时,如果找到了匹配游标,那么Oracle就会把存储于该子游标解析树和执行计划直接拿过来重用,而不用再从头开始解析。

    78910

    【DB笔试面试585】在Oracle,什么是常规游标共享?

    ♣ 题目部分 在Oracle,什么是常规游标共享?...♣ 答案部分 游标共享(Cursor Sharing)是指共享游标(Shared Cursor)之间共享,游标共享可以实现重用存储在子游标(Child Cursor)解析树和执行计划而不用从头开始做硬解析...下面分别来介绍常规游标共享和自适应游标共享这两个方面。 1、 常规游标共享 常规游标共享是在Oracle 8i引入。...当开启了常规游标共享后,Oracle在实际解析目标SQL之前,会先用系统产生绑定变量来替换目标SQLSQL文本WHERE条件或者INSERTVALUES子句中具体输入值,这样替换后实际执行...Oracle数据库常规游标共享受参数CURSOR_SHARING控制,其值可以被设置为EXACT、SIMILAR或FORCE,它们各自含义如下所示: l EXACT表示Oracle不会用系统产生绑定变量来替换目标

    87940

    【DB笔试面试587】在Oracle,常规游标共享和自适应游标共享联系和区别有哪些?

    ♣ 题目部分 在Oracle,常规游标共享和自适应游标共享联系和区别有哪些? ♣ 答案部分 从严格意义上来说,常规游标共享和自适应游标共享是各自独立,两者之间没有必然联系。...常规游标共享目的是通过使用系统产生绑定变量替换目标SQLSQL文本具体输入值,以达到在不改一行应用代码情况下,使那些仅仅是SQL文本WHERE条件或者VALUES子句(适用于INSERT语句...)具体输入值不同目标SQL彼此之间共享解析树和执行计划。...在Oracle 11g,对于使用了绑定变量目标SQL而言,不管这个绑定变量是该SQL自带还是开启常规游标共享后系统产生,只要满足一定条件(比如绑定变量窥探被开启,该SQL中使用绑定变量数量不超过...在自适应游标共享被开启情况下,Oracle并不推荐将CURSOR_SHARING值设为SIMILAR,因为当把CURSOR_SHARING值设为SIMILAR后,对自适应游标共享可能有不好影响,

    58410

    【DB笔试面试387】简述Oracle存储过程,游标和函数区别。

    Q 题目 简述Oracle存储过程,游标和函数区别。 A 答案 游标类似指针,游标可以执行多个不相关操作。...存储过程和函数区别如下所示: ① 函数可以理解为是存储过程一种; ② 函数可以没有参数,但是一定需要一个返回值,存储过程可以没有参数,不需要返回值; ③ 函数和存储过程都可以通过OUT参数返回值,如果需要返回多个参数那么建议使用存储过程...DB笔试面试历史连接 http://mp.weixin.qq.com/s/Vm5PqNcDcITkOr9cQg6T7w About Me:小麦苗 ● 本文作者:小麦苗,只专注于数据库技术,更注重技术运用...● 作者博客地址:http://blog.itpub.net/26736162/abstract/1/ ● 本系列题目来源于作者学习笔记,部分整理自网络,若有侵权或不当之处还请谅解 ● 版权所有,欢迎分享本文

    70720

    【DB笔试面试586】在Oracle,什么是自适应游标共享(4)?

    ]之内,所以刚才Oracle在执行上述SQL时(即第8次执行目标SQL)用就是软解析/软软解析,并且此时重用就是CHILD_NUMBER为5Child Cursor存储解析树和执行计划。...这里需要注意是,自适应游标共享在Oracle 11g中有一个硬限制——只有当目标SQL绑定变量(不管这个绑定变量是该SQL自带还是开启常规游标共享后系统产生个数不超过14个时,自适应游标共享才会生效...Child Cursor,即当目标SQL绑定变量数量不超过14时,自适应游标共享确实生效了: LHR@orclasm > SELECT A.SQL_TEXT, A.SQL_ID,A.VERSION_COUNT...Child Cursor,即当目标SQL绑定变量数量超过14时,自适应游标共享确实没有生效: LHR@orclasm > SELECT A.SQL_TEXT, A.SQL_ID,A.VERSION_COUNT...数据库与自适应游标共享相关全部内容。

    56020

    【DB笔试面试586】在Oracle,什么是自适应游标共享(3)?

    注意,“Peeked Binds”部分内容为“1 - :X (VARCHAR2(30), CSID=852): 'CLUSTER'”,说明Oracle在硬解析上述SQL过程确实再次使用了绑定变量窺探...Cursor对应可选择率范围为[0.00002,0.000028],根本就不在之前V$SQL_CS_SELECTIVITY记录之内,所以Oracle此时还是得用硬解析。...究其根本原因,还是因为在自适应共享游标被启用前提条件下,当已经被标记为Bind AwareChild Cursor所对应目标SQL再次被执行时,Oracle会根据当前传入绑定变量值所对应谓词条件可选择率...如果当前传入绑定变量值所在谓词条件可选择率处于该SQL之前硬解析时同名谓词条件在V$SQL_CS_STATISTICS记录可选择率范围之内,则此时Oracle就会使用软解析/软软解析,反之则是硬解析...上述SQL从第4次到第7次连续4次执行时,对应谓词条件可选择率范围均不在之前V$SQL_CS_SELECTIVITY记录相关旧Child Cursor对应可选择率范围之内,所以这4次执行时Oracle

    35130

    【DB笔试面试586】在Oracle,什么是自适应游标共享(1)?

    ♣ 题目部分 在Oracle,什么是自适应游标共享?...在Oracle 10g及其后续版本Oracle会自动收集直方图统计信息,这意味着与之前版本相比,在Oracle 10g及其后续版本Oracle有更大概率会知道目标列实际数据分布情况,也就是说绑定变量窥探副作用将会更加明显...为了解决上述绑定变量窥探所带来问题,Oracle在l1g引入了自适应游标共享(Adaptive Cursor Sharing,ACS)。...先介绍Oracle数据库与自适应游标共享相关一些基本概念。...这里需要注意是,自适应游标共享在Oracle 11g中有一个硬限制——只有当目标SQL绑定变量(不管这个绑定变量是该SQL自带还是开启常规游标共享后系统产生个数不超过14个时,自适应游标共享才会生效

    67120

    【DB笔试面试586】在Oracle,什么是自适应游标共享(2)?

    ,则Oracle此时除了会新生成一个Child Cursor之外,还会把存储相同执行计划原有Child Cursor标记为非共享(把原有Child Cursor在V$SQL对应记录列IS SHAREABLE...注意到“Peeked Binds”部分内容为“1 - :X (VARCHAR2(30), CSID=852): 'INDEX'”,这说明Oracle在硬解析目标SQL过程确实再次使用了绑定变量窥探...现在问题是,既然Oracle此时选择执行计划与原有Child Cursor存储执行计划相同,为什么不直接沿用原先执行计划而是还得再做一次硬解析呢?...在介绍自适应游标共享整体执行流程时曾经提到过:对于标记为Bind AwareChild Cursor所对应目标SQL,当该SQL再次被执行时,Oracle就会根据当前传入绑定变量值所对应谓词条件可选择率...Cursor对应可选择率范围为[0.027412,0.033503],根本就不在之前V$SQL_CS_SELECTIVITY记录之内,所以Oracle此时还是得用硬解析。

    51530

    oracle存储过程语法

    vs_ym_end CHAR(6); –终止月份 vs_ym_sn_beg CHAR(6); –同期起始月份 vs_ym_sn_end CHAR(6); –同期终止月份 –定义游标(简单说就是一个可以遍历结果集...因为在Oracle 本是没有数组概念,数组其实就是一张 — 表(Table), 每个数组元素就是表一个记录,所以遍历数组时就相当于从表第一条记录开始遍历 for i in 1..varArray.count...本是没有数组概念,数组其实就是一张表(Table), 每个数组元素就是表一个记录。...游标的使用 Oracle Cursor 是非常有用,用于遍历临时表查询结果。...Cursor 遍历 end test; (2)SYS_REFCURSOR 型游标,该游标Oracle 以预先定义游标,可作出参数进行传递 create or replace procedure

    88930
    领券