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条数据输出完毕
游标中已经没有数据

 

posted @ 2012-04-13 23:46  shuaisam  阅读(178)  评论(0编辑  收藏  举报