oracle 游标使用

 
  游标是SQL的一个内存工作区,由系统或用户以变量的形式定义。游标的作用就是用于临时存储从数据库中提取的数据块。在某些情况下,需要把数据从存放在磁盘的表中调到计算机内存中进行处理,最后将处理结果显示出来或最终写回数据库。这样数据处理的速度才会提高,否则频繁的磁盘数据交换会降低效率。
  游标有两种类型:显式游标和隐式游标。在前述程序中用到的SELECT...INTO...查询语句,一次只能从数据库中提取一行数据,对于这种形式的查询和DML操作,系统都会使用一个隐式游标。但是如果要提取多行数据,就要由程序员定义一个显式游标,并通过与游标有关的语句进行处理。显式游标对应一个返回结果为多行多列的SELECT语句。
  游标一旦打开,数据就从数据库中传送到游标变量中,然后应用程序再从游标变量中分解出需要的数据,并进行处理。、

   隐式游标的属性:

  • SQL%ROWCOUNT    整型  代表DML语句成功执行的数据行数   
  • SQL%FOUND   布尔型 值为TRUE表插入、删除、更新或单行查询操作成功   
  • SQL%NOTFOUND    布尔型 与SQL%FOUND属性返回值相反   
  • SQL%ISOPEN  布尔型 DML执行过程中为真,结束后为假   

     显示游标的属性:

  • %ROWCOUNT   整型  获得FETCH语句返回的数据行数   
  • %FOUND  布尔型 最近的FETCH语句返回一行数据则为真,否则为假   
  • %NOTFOUND   布尔型 与%FOUND属性返回值相反   
  • %ISOPEN 布尔型 游标已经打开时值为真,否则为假

     游标循环:

  1、loop循环

  open cur;

       loop   

       fetch cur into 参数1,参数2,参数3;   

       exit when c_cur%notfound;   

     ……   /*执行业务逻辑*/

       end loop  ;

      colse cur;

  exit when语句一定要紧跟在fetch之后,避免多余的数据处理,放在fetch之前会出现重复的一条数据, 处理逻辑需要跟在exit when之后。

  2、while循环

  open cur;

    fetch cur into 参数1,参数2;   

   while cur%found loop   

    ……     业务逻辑   

    fetch cur into 参数1,参数2 ;   

     end loop;  

  close cur;

 使用while 循环时,需要在循环之前进行一次fetch动作.数据处理动作必须放在循环体内的fetch方法之前。循环体内的fetch方法要放在最后。否则就会多处理一次。

  3、for循环

  for item in curloop   

     v_aa := item.aa;   

      v_bb := item.bb;  

       …  业务逻辑

   end loop; 

   for循环自动open和close游标。

posted @ 2014-11-18 10:37  云淡风轻jimmy  阅读(155)  评论(0)    收藏  举报