我想知道如何将NOCOPY
作为函数参数传递可以提高返回SYS_REFCURSOR
的函数的性能。
阅读Oracle文档后,我阅读了以下内容:
如果要在OUT参数中传回大量数据(例如集合,大VARCHAR2值或LOB),此技术可以显着提高速度。
由于SYS_REFCURSORS
是指向查询结果集的指针而SELECT
是SQL中最快的操作,因此在函数中传递<SYS_REFCURSOR> OUT NOCOPY SYS_REFCURSOR
这样的东西有什么好处吗?
我找到了this thread,但出现了两个意见:
1 - 我们可以通过引用增加性能调用,而不是通过以下值增加:
Procedure (vRefCur OUT NOCOPY SYS_REFCURSOR).
2 - SYS_REFCURSOR
已经是一个指针(link)并且为了提高性能,应优化SQL语句。
你怎么看?
提前致谢!
至于表现 - 没有太大的区别。
如果未指定NOCOPY
,Oracle将只创建指针的另一个副本。
因此,如果您不希望在系统中有两个相同的指针 - 提供NOCOPY提示。
对于SYS_REFCURSOR
来说没有任何区别。 SYS_REFCURSOR
只是一个指针,即大小只有几个字节。
你会得到LOB
的不同,它可能有几千兆甚至几千字节的大小。