Oracle存储过程使用游标遍历

来源:互联网 发布:java%n是什么意思 编辑:程序博客网 时间:2024/06/16 18:51

          由于批量数据字段修改需要用到遍历表中每条记录的某个字段值,想使用存储过程处理。找到一些存储过程的资料:

         declare
               cursor c_job
               is
               select * from emp;
               c_row c_job%rowtype;
         begin
         ===========================for=================================
                for c_row in c_job loop
                         dbms_output.put_line(c_row.empno||'-'||c_row.ename||'-'||c_row.job||'-'||c_row.sal);
                end loop;
          end;

          ===================fetch=============================
                 open c_job;
                 loop
                 fetch c_job into c_row;
                         exit when c_job%notfound;
                         dbms_output.put_line(c_row.empno||'-'||c_row.ename||'-'||c_row.job||'-'||c_row.sal);
                 end loop;
           close c_job;

         遍历的两种方式,for循环和fetch:for 不需要显式声明游标,是隐式打开、关闭游标;用fetch则需要显式声明游标,显式打开、关闭游标。

         PL/SQL语言提供了游标FOR循环语句,自动执行游标的OPEN,FETCH,CLOSE语句和循环语句的功能。当进入循环时,游标FOR循环语句自动打开游标,并提取第一行游标数据,当程序处理完当前所提取的数据而 进入下次循环时,游标FOR循环语句自动提取下一行数据供程序处理,当提取结果集合中的所有数据行后结束循环,并自动关闭游标。

         for的效率高些,for的时候oracle默认会预提取一百行处理,类似批处理了。比 单独的 fetch一条一条的快。

         <--  cursor--游标;fetch -- 取; -->

0 0
原创粉丝点击