我想知道将NOCOPY
作为函数参数传递如何提高返回SYS_REFCURSOR
的函数的性能。
在阅读Oracle文档之后,我会阅读以下内容:
如果您要在OUT参数中传回大量数据,例如集合,较大的VARCHAR2值或LOB,则此技术可以显着提高速度。
由于SYS_REFCURSORS
是查询结果集的指针,而SELECT
是SQL中最快的操作,因此在函数中传递<SYS_REFCURSOR> OUT NOCOPY SYS_REFCURSOR
这样的东西有什么好处吗? / p>
我发现了this thread,但有两种见解:
1-我们可以通过引用而不是按值来提高性能调用,如下所示:
Procedure (vRefCur OUT NOCOPY SYS_REFCURSOR).
2-{{1}}已经是指针(link),为了提高性能,应该优化SQL语句。
你怎么看?
谢谢!
答案 0 :(得分:4)
As for performance - there is no big difference.
When NOCOPY
is not specified Oracle will just create another copy of a pointer.
So if you do not want to have two same pointers in the system - provide the NOCOPY hint.
答案 1 :(得分:4)
对于SYS_REFCURSOR
,没有任何区别。 SYS_REFCURSOR
只是一个指针,即大小只有几个字节。
您将得到LOB
的不同之处,其大小可能为几千兆字节甚至是太字节。