游标的基本应用

来源:互联网 发布:美国人的穿衣风格数据 编辑:程序博客网 时间:2024/06/04 18:46

一、使用游标的理由。

      我本是一个用MSSQL多的程序员,所以习惯上是用select 语句的多,但经ORACLE资深应用人员介绍,游标在第一次执行时比select慢,但以后用同一个游标却会快很多。所以现在的ERP里很多东西都用游标来写。

二、游标格式:

      普通格式:

     declare

          cursor rec_ IS

               select 语名;

     例:

      declare

           cursor rec_ IS

                  select ikey,customerName

                  from customer;

      带参数格式:

      declare

           cursor rec_(pram1 varchar2,...)   IS

               select 语句;

      例:

      declare

           cursor rec_(name_ varchar2)   IS

                  select ikey,customerName

                  from customer

                  where  customerName=name_;

三、游标使用

     普通格式

     取第一行的值。

     open rec_;

     Fetch rec_ into 变量1,变量2(相对select语句的栏位)

     close rec_;

     例:

      declare

           key_         number;

           cname_      varchar2(50);

           cursor rec_ IS

                  select ikey,customerName

                  from customer;

     begin

           open rec_;

           fetch rec_      into      key_,cname_;

           dbms_output.put_line('key:'||key_||'#name:'||cname_);

           close rec_;

     end;

    取循环值。

     for [item]  in rec_   loop

         变量1:=[item].[col1相对select语句的栏位名];

         .......

     end loop;

     例:

      declare

           key_         number;

           cname_      varchar2(50);

           cursor rec_ IS

                  select ikey,customerName

                  from customer;

     begin

          for   item_ in rec_ loop

              dbms_output.put_line('key:'||rec_.ikey||'#name:'||rec_.customerName );

          end loop;

     end;

     带参数格式:

     for item_ in rec_(值1,......) loop

          变量1:=[item].[col1相对select语句的栏位名];

         .......

     end loop;

     例:

      declare

           key_         number;

           cname_      varchar2(50);

           cursor rec_(cname_ varchar2) IS

                  select ikey,customerName

                  from customer

                  where customerName=cname_;

     begin

          for   item_ in rec_('XX集团') loop

              dbms_output.put_line('key:'||rec_.ikey||'#name:'||rec_.customerName );

          end loop;

     end;

 

     这些都是游标的最基本的应用,游标里面可以嵌套游标,形成多循环。