1

我有一个执行良好的查询并且也进行了调整。我把它放在一个程序中。当我使用一组值从 SQL 执行查询以绑定其中使用的变量时,最多在 3-4 秒内产生结果。

来自 refcursor 的相同结果集需要 2 多分钟才能给出结果。我知道可能需要时间的是游标的 OPEN FETCH 和 CLOSE 。

我已经证实该过程中没有其他任何东西会消耗时间,因此排除了这种情况。

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

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

还可以做些什么来提高这个 REFCURSOR 速度?任何帮助深表感谢。

4

1 回答 1

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;
于 2014-08-18T15:52:10.310 回答