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