本文整理自网络,侵删。
1.情景展示
Oracle 遍历游标的四种方式(for、fetch、while、bulk collect+forall)
2.问题分析
我们可以把游标想象成一张表,想要遍历游标,就要取到游标的每行数据,所以问题的关键就成了:如何取到行数据?
3.解决方案
方式一:FOR 循环(推荐使用)
变形一:遍历显式游标
/* 如果是在存储过程外使用显式游标,需要使用DECLARE关键字 */ DECLARE /*创建游标*/ CURSOR CUR_FIRST_INDEX IS SELECT A.ID A_ID, --一级指标ID A.INDEXNAME A_INDEXNAME --一级指标名称 FROM INDEX_A A ORDER BY A_ID; /*定义游标变量,该变量的类型为基于游标CUR_FIRST_INDEX的行记录*/ ROW_CUR_FIRST_INDEX CUR_FIRST_INDEX%ROWTYPE; /*游标处理*/ BEGIN /*遍历显式游标*/ --FOR 循环 FOR ROW_CUR_FIRST_INDEX IN CUR_FIRST_INDEX LOOP --循环体 DBMS_OUTPUT.PUT_LINE('{"ID":"' || ROW_CUR_FIRST_INDEX.A_ID || '","名称":"' || ROW_CUR_FIRST_INDEX.A_INDEXNAME || '"}'); END LOOP; END;
执行,输出结果
变形二:遍历隐式游标(推荐使用)
for循环遍历游标,其实又可以分为两种方式,一种是显式游标的遍历,另一种是隐式游标的遍历。
/* 如果是在存储过程外使用隐式游标,如果用不到变量无需声明DECLARE关键字 */ /*游标处理*/ BEGIN /*遍历隐式游标*/ --FOR 循环 FOR ROW_CUR_FIRST_INDEX IN (SELECT A.ID A_ID, --一级指标ID A.INDEXNAME A_INDEXNAME --一级指标名称 FROM INDEX_A A ORDER BY A_ID) LOOP --循环体 DBMS_OUTPUT.PUT_LINE('{"ID":"' || ROW_CUR_FIRST_INDEX.A_ID || '","名称":"' || ROW_CUR_FIRST_INDEX.A_INDEXNAME || '"}'); END LOOP; END;
隐式游标相较于显式游标用法更加简单,无需声明直接调用即可。
相关阅读 >>
oracle 11g release (11.1) 索引底层的数据结构
linux系统(x64)安装oracle11g完整安装图文教程另附基本操作
更多相关阅读请进入《oracle》频道 >>

数据库系统概念 第6版
本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。