Мне было интересно, как передача NOCOPY в качестве параметра функции может повысить производительность функции, возвращающей SYS_REFCURSOR.
Прочитав документацию Oracle, я прочитал следующее:
This technique can give significant speedup if you are passing back large amounts of data in OUT parameters, such as collections, big VARCHAR2 values, or LOBs.
Поскольку SYS_REFCURSORS — это указатели на набор результатов для запроса, а SELECT — самая быстрая операция в SQL, есть ли какое-то преимущество в передаче такой вещи, как <SYS_REFCURSOR> OUT NOCOPY SYS_REFCURSOR, в функцию?
Я нашел эта тема, но возникают два мнения:
1. Мы можем повысить производительность вызова по ссылке, а не по значению следующим образом:
Procedure (vRefCur OUT NOCOPY SYS_REFCURSOR).
2 - SYS_REFCURSOR уже является указателем (связь), и для повышения производительности следует оптимизировать оператор SQL.
Как вы думаете?
Заранее спасибо!

Что касается производительности - большой разницы нет.
Когда NOCOPY не указан, Oracle просто создаст другая копия указателя.
Так что если вы не хотите иметь два одинаковых указателя в системе - дайте подсказку NOCOPY.
Для SYS_REFCURSOR это не имеет никакого значения. SYS_REFCURSOR — это просто указатель, т.е. размер всего пара байт.
Вы получите разницу за LOB, которая может иметь размер в несколько гигабайт или даже терабайт.
Да, я понимаю! Спасибо :)
Большое спасибо! :)