需求理解与分析
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