Oracle 遍历游标的三种方式(for、fetch、while)
我们可以把游标想象成一张表,想要遍历游标,就要取到游标的每行数据,所以问题的关键就成了:如何取到行数据?
/* 如果是在存储过程外使用显示游标,需要使用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;
执行,输出结果

/*游标处理*/
BEGIN
/*遍历游标*/
--FETCH 循环
OPEN CUR_FIRST_INDEX; --必须要明确的打开和关闭游标
LOOP
FETCH CUR_FIRST_INDEX INTO ROW_CUR_FIRST_INDEX;
EXIT WHEN CUR_FIRST_INDEX%NOTFOUND;
--循环体
DBMS_OUTPUT.PUT_LINE(‘{"ID":"‘ || ROW_CUR_FIRST_INDEX.A_ID || ‘","名称":"‘ || ROW_CUR_FIRST_INDEX.A_INDEXNAME || ‘"}‘);
END LOOP;
CLOSE CUR_FIRST_INDEX;
END;
/*游标处理*/
BEGIN
/*遍历游标*/
OPEN CUR_FIRST_INDEX; --必须要明确的打开和关闭游标
FETCH CUR_FIRST_INDEX INTO ROW_CUR_FIRST_INDEX;
WHILE CUR_FIRST_INDEX%FOUND LOOP
--循环体
DBMS_OUTPUT.PUT_LINE(‘{"ID":"‘ || ROW_CUR_FIRST_INDEX.A_ID || ‘","名称":"‘ || ROW_CUR_FIRST_INDEX.A_INDEXNAME || ‘"}‘);
FETCH CUR_FIRST_INDEX INTO ROW_CUR_FIRST_INDEX;
END LOOP;
CLOSE CUR_FIRST_INDEX;
END;
注意:使用while循环时,需要fetch两次。
使用for循环的优势在于:
不需要手动打开&关闭游标(声明游标的开启和关闭);
不需要手动捕获数据(自动将数据fetch到记录型变量);
不需要关注何时要退出,也就是不需要写退出循环的满足条件(遍历完成就会退出)。
Oracle 遍历游标的三种方式(for、fetch、while)
原文:https://www.cnblogs.com/Marydon20170307/p/12869692.html