我的查询效果很好,也经过调整。我把它放在一个程序中。当我使用一组值从SQL执行查询以绑定其中使用的变量时,结果最多生成3-4秒。
来自refcursor的相同结果集需要2分钟才能得到结果。我知道光标的OPEN FETCH和CLOSE可能需要时间。
我已经确认该程序中的其他任何内容都没有消耗时间,因此被排除在外。
返回的记录数量大约为9000+,这让我想到了一个问题 - 当记录集的大小超出某个限制时,ref光标是否更适合?
RAM大小有问题吗?我已经使用TOAD执行查询和比较过程。是的,我已经去了最后一条记录,所以它不像查询只返回前几个。
还可以采取哪些措施来提高REFCURSOR的速度?非常感谢任何帮助。
答案 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;