Oracle 遍历游标的四种方式(for/fetch/while/BULK COLLECT)

本文探讨了在Oracle数据库中遍历游标Cursor的四种方法:FOR循环(显式和隐式)、FETCH循环、WHILE循环以及BULK COLLECT结合FOR循环。通过对比,发现BULK COLLECT + FOR是速度最快、效率最高的方式,而其他方法在处理大量数据时可能面临效率问题。同时提到了Oracle报错Ora-2000 buffer overflow的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求理解与分析

Request: 在Oracle中我们可以使用游标Cursor去存储多条查询数据的结果集,现在需要对该结果集的每行数据进行数据操作,即 遍历游标Cursor并针对遍历目标行进行查询操作。如何才能取到游标Cursor的行数据呢?

*本文仅提供查询展示游标数据的四种方式对比,利用游标进行遍历更新、插入等操作的后续会有专文整理。

解决方案

Oracle中对游标Cursor进行遍历的方式有4种 :for | fetch | while | bulk collect + for

方式1: FOR 循环遍历(显示+隐式)

  • 遍历显示游标 
--在存储过程外使用显式游标时,需要使用DECLARE关键字 
DECLARE
  --创建游标
  CURSOR cur_play_info IS
    SELECT A.player_id   AS A_ID        --一级指标ID
          ,A.player_name AS A_INDEXNAME --一级指标名称
      FROM player_info A
     ORDER BY A_ID
  ;
  
  --定义游标变量,该变量的类型为基于游标 cur_play_info 的行记录
  row_cur_play_info cur_play_info%ROWTYPE;
 
BEGIN
  --遍历显示游标
  --设置buffer size
  dbms_output.enable(10000000);
  --FOR 循环
  FOR row_cur_play_info IN cur_play_info LOOP
    --循环体
    DBMS_OUTPUT.PUT_LINE('["玩家ID":"' || row_cur_play_info.A_ID || '","玩家名称":"' || row_cur_play_info.A_INDEXNAME || '"]');
  END LOOP;
END;

        输出结果:数据量1355,耗时0.004s

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值