您好,UncleToo欢迎您!  为了更好的浏览本站,请使用高版本浏览器
RSS  Tag     设为首页 | 加入收藏
 您所在的位置:首页 > 数据库技术 > Oracle

ORACLE存储过程中遍历游标的三种方式

作者:UncleToo  来源:转载  日期:2016-02-17 22:12:27
收藏  评论:( 0 )  阅读:268

第一种使用For 循环

for循环是比较简单实用的方法。

首先,它会自动open和close游标。解决了你忘记打开或关闭游标的烦恼。

其次,自动声明一个记录类型及定义该类型的变量,并自动fetch数据到这个变量。

注意C_ROW 这个变量无需要在循环外进行声明,无需为其指定数据类型。它是一个记录类型,具体的结构是由游标决定的。

这个变量的作用域仅仅是在循环体内。

最后,与该游标关联的所有记录都已经被取回后,循环无条件结束,不必判定游标的%NOTFOUND属性为TRUE。

for循环是用来循环游标的最好方法。高效,简洁,安全。


第二种使用Fetch循环

注意,exit when语句一定要紧跟在fetch之后,避免多余的数据处理。

处理逻辑需要跟在exit when之后。

循环结束后要记得关闭游标。


第三种使用While循环

使用while 循环时,需要在循环之前进行一次fetch动作,游标的属性才会起作用。

而且数据处理动作必须放在循环体内的fetch方法之前,循环体内的fetch方法要放在最后,否则就会多处理一次。

例子:

CREATE OR REPLACE PROCEDURE PRC_LJ IS
CURSOR C_EMP IS --声明显式游标
SELECT EMPNO,ENAME
FROM EMP;
C_ROW C_EMP%ROWTYPE; --定义游标变量,该变量的类型为基于游标C_EMP的记录
BEGIN
--For 循环
FOR C_ROW IN C_EMP LOOP
DBMS_OUTPUT.PUT_LINE(C_ROW.EMPNO || '--' || C_ROW.ENAME);
END LOOP;
--Fetch 循环
OPEN C_EMP;--必须要明确的打开和关闭游标
LOOP
FETCH C_EMP
INTO C_ROW;
EXIT WHEN C_EMP%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(C_ROW.EMPNO || '++' || C_ROW.ENAME);
END LOOP;
CLOSE C_EMP;
--While 循环
OPEN C_EMP;--必须要明确的打开和关闭游标
FETCH C_EMP INTO C_ROW;
WHILE C_EMP%FOUND LOOP
DBMS_OUTPUT.PUT_LINE(C_ROW.EMPNO || '**' || C_ROW.ENAME);
FETCH C_EMP INTO C_ROW;
END LOOP;
CLOSE C_EMP;
END PRC_LJ;



除非特别声明,本站所有PHP教程及其他教程/文章均为原创、翻译或网友投稿,版权均归UncleToo中文网所有, 转载请注明作者及出处。
原文网址:http://www.uncletoo.com/html/oracle/1160.html
读完这篇文章后,你是否有所收获? 分享是一种生活的信念!
  • 0
  • 0
我来说两句
更多>>网友评论