是pl / sql refcursor只是为了返回几个记录?

时间:2014-08-18 15:14:25

标签: oracle plsql sys-refcursor

我的查询效果很好,也经过调整。我把它放在一个程序中。当我使用一组值从SQL执行查询以绑定其中使用的变量时,结果最多生成3-4秒。

来自refcursor的相同结果集需要2分钟才能得到结果。我知道光标的OPEN FETCH和CLOSE可能需要时间。

我已经确认该程序中的其他任何内容都没有消耗时间,因此被排除在外。

返回的记录数量大约为9000+,这让我想到了一个问题 - 当记录集的大小超出某个限制时,ref光标是否更适合?

RAM大小有问题吗?我已经使用TOAD执行查询和比较过程。是的,我已经去了最后一条记录,所以它不像查询只返回前几个。

还可以采取哪些措施来提高REFCURSOR的速度?非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

您是否正在使用BULK COLLECT一次抓取多行?

  OPEN c_cursor;
  LOOP
    FETCH c_cursor
    BULK COLLECT INTO l_tab LIMIT 1000; -- or no limit to fetch all at once
    for i in 1 .. l_tab.last loop
      -- process each row
    end loop;
    EXIT WHEN c_cursor%NOTFOUND;
  END LOOP
  CLOSE c_cursor;