+ -
当前位置:首页 → 问答吧 → 最简单的游标写法

最简单的游标写法

时间:2011-09-12

来源:互联网

--1.没有动态语句


begin
for rec in (select caption from okform)
loop
  dbms_output.put_line(rec.caption);
end loop;

end;

--2. 动态游标写法

declare
  rec   sys_refcursor;
  v_caption varchar2(200);
begin
  open   rec  for  ' select caption from okform'  ;
  loop
       FETCH rec INTO v_caption;
        EXIT WHEN rec%NOTFOUND;
        dbms_output.put_line(v_caption);
         
  end loop;
  close rec;   
end;


对于动态游标,我觉得写法还不够简单,不知道是有更简洁的写法;

另外有个疑惑,对于后者, close rec 不写有没有问题,我觉得当pl/sql结束后,生命周期也就完了,无所谓要关闭游标;


比如执行下面这段话,夸张一点,1秒执行10次,24小时不断;

declare
  rec   sys_refcursor;
  v_caption varchar2(200);
begin
  open   rec  for  select caption from okform ;
     --没有关闭游标
end;


一段时间后,数据库会不会崩溃;

作者: qingyun   发布时间: 2011-09-12

我在不关闭游标的情况下运行多次,结果select count(*) from v$open_cursor没有什么变化,可见PLSQL对REFCURSOR进行回收了。

作者: newkid   发布时间: 2011-09-12