PL / SQL-NOCOPY参数可提高性能

时间:2019-03-06 11:06:43

标签: database oracle performance plsql

我想知道将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语句。

你怎么看?

谢谢!

2 个答案:

答案 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的不同之处,其大小可能为几千兆字节甚至是太字节。