pl/sql 编程(七)

  • 显式游标
declare

 cursor goods_cursor  --创建游标

 is

 select * from goods where goodsid < 5;

 

 cur_goods_cursor goods%rowtype; --声明记录类型

begin

 open goods_cursor;              --打开游标

      loop

           fetch goods_cursor into cur_goods_cursor;

           exit when goods_cursor %notfound;

           dbms_output.put_line(cur_goods_cursor.goodsid||'-'||cur_goods_cursor.goodsname||'-'||cur_goods_cursor.remark);

      end loop;     

 close goods_cursor;             --关闭游标

end;

  输出结果:

1-白加黑-编号小于10

2-快克-编号小于10

3-感康-编号小于10

4-斯达舒-编号小于10

对于大数据量,可以采用以下的方式

declare

 cursor goods_cursor  --创建游标

 is

 select * from goods where goodsid < 5;

 type goods_tab is table of goods%rowtype; --声明索引表数据类型

 cur_goods_cursor goods_tab;               --声明循环变量

 

begin

 open goods_cursor;

    loop

      fetch goods_cursor bulk collect into cur_goods_cursor limit 3;--取三条到索引表

      for i in 1..cur_goods_cursor.count loop          --循环索引表

          dbms_output.put_line(cur_goods_cursor(i).goodsid||'-'||cur_goods_cursor(i).goodsname||'-'||cur_goods_cursor(i).remark);  

      end loop;

      exit when goods_cursor%notfound;

    end loop;  

 close goods_cursor;

end;

 

显式游标的属性

declare

 cursor goods_cursor  --创建游标

 is

 select * from goods where goodsid < 5;

 

 cur_goods_cursor goods%rowtype; --声明记录类型

begin

   if goods_cursor%isopen then

      dbms_output.put_line('游标已经打开');

   else

       dbms_output.put_line('游标没有打开,现在打开游标');

       open goods_cursor;              --打开游标

       if goods_cursor%isopen then

           dbms_output.put_line('现在已经打开游标');

       end if;

            loop

                 fetch goods_cursor into cur_goods_cursor;

                 --exit when goods_cursor %notfound;

                 if goods_cursor %found then

                    dbms_output.put_line(cur_goods_cursor.goodsid||'-'||cur_goods_cursor.goodsname||'-'||cur_goods_cursor.remark);

                    dbms_output.put_line(''||goods_cursor%rowcount||'条数据输出完毕');

                 else

                    dbms_output.put_line('游标中已经没有数据');

                    exit;  

                 end if;

            end loop;     

       close goods_cursor;             --关闭游标

   end if;

end;

输出结果:

游标没有打开,现在打开游标

现在已经打开游标

1-白加黑-编号小于10

第1条数据输出完毕

2-快克-编号小于10

第2条数据输出完毕

3-感康-编号小于10

第3条数据输出完毕

4-斯达舒-编号小于10

第4条数据输出完毕

游标中已经没有数据

 

你可能感兴趣的:(pl/sql)