• 存储过程游标遍历


     

     源自 http://375940084.blog.51cto.com/2581965/1060822/ 棉花糖的博客

     1 CREATE OR REPLACE PROCEDURE PRC_LJ IS 
     2   CURSOR C_EMP IS --声明显式游标  
     3     SELECT EMPNO,ENAME FROM EMP;  
     4   C_ROW C_EMP%ROWTYPE; --定义游标变量,该变量的类型为基于游标C_EMP的记录  
     5 BEGIN 
     6   --For 循环  
     7   FOR C_ROW IN C_EMP LOOP  
     8     DBMS_OUTPUT.PUT_LINE(C_ROW.EMPNO || '--' || C_ROW.ENAME);  
     9   END LOOP;  
    10  
    11   --Fetch 循环  
    12   OPEN C_EMP;--必须要明确的打开和关闭游标  
    13   LOOP  
    14     FETCH C_EMP  
    15       INTO C_ROW;  
    16     EXIT WHEN C_EMP%NOTFOUND;  
    17     DBMS_OUTPUT.PUT_LINE(C_ROW.EMPNO || '++' || C_ROW.ENAME);  
    18   END LOOP;  
    19   CLOSE C_EMP;  
    20  
    21   --While 循环  
    22   OPEN C_EMP;--必须要明确的打开和关闭游标  
    23     FETCH C_EMP INTO C_ROW;  
    24     WHILE C_EMP%FOUND LOOP  
    25       DBMS_OUTPUT.PUT_LINE(C_ROW.EMPNO || '**' || C_ROW.ENAME);  
    26       FETCH C_EMP INTO C_ROW;  
    27     END LOOP;  
    28   CLOSE C_EMP;  
    29 END PRC_LJ;
    View Code

    第一种使用For 循环
    for循环是比较简单实用的方法。 
    首先,它会自动open和close游标。解决了你忘记打开或关闭游标的烦恼。 
    其次,自动声明一个记录类型及定义该类型的变量,并自动fetch数据到这个变量。 
    注意C_ROW 这个变量无需要在循环外进行声明,无需为其指定数据类型。它是一个记录类型,具体的结构是由游标决定的。
    这个变量的作用域仅仅是在循环体内。
    最后,与该游标关联的所有记录都已经被取回后,循环无条件结束,不必判定游标的%NOTFOUND属性为TRUE。
    for循环是用来循环游标的最好方法。高效,简洁,安全。

    第二种使用Fetch循环
    注意,exit when语句一定要紧跟在fetch之后,避免多余的数据处理。 
    处理逻辑需要跟在exit when之后。 
    循环结束后要记得关闭游标。

    第三种使用While循环
    使用while 循环时,需要在循环之前进行一次fetch动作,游标的属性才会起作用。
    而且数据处理动作必须放在循环体内的fetch方法之前,循环体内的fetch方法要放在最后,否则就会多处理一次。

  • 相关阅读:
    程序员书单合集,持续整理中
    informatica9.5.1后最一步出错(ICMD_10033,INFACMD_10053)
    Informatica9.5.1配置域名错误(ICMD_10033,INFASETUP_10002,RSVCSHARED_00021)
    程序员书单_UML篇
    程序员书单_J2EE专题
    程序员书单_求职面试
    程序员书单_java专项进阶篇
    程序员书单_HTML篇
    程序员书单_数据结构和算法篇
    程序员书单_HeadFirst系列
  • 原文地址:https://www.cnblogs.com/shuanlei/p/4539928.html
Copyright © 2020-2023  润新知