PL / SQL - параметр NOCOPY для повышения производительности - PullRequest
3 голосов
/ 06 марта 2019

Мне было интересно, как передача NOCOPY в качестве параметра функции может повысить производительность функции, возвращающей SYS_REFCURSOR.

После прочтения документации Oracle я прочитал следующее:

Этот метод может значительно ускорить передачу больших объемов данных в параметрах OUT, таких как коллекции, большие значения VARCHAR2 или большие объекты.

Поскольку SYS_REFCURSORS являются указателями на результирующий набор для запроса, а SELECT является самой быстрой операцией в SQL, есть ли преимущество передачи такой функции, как <SYS_REFCURSOR> OUT NOCOPY SYS_REFCURSOR, в функцию?

Я нашел эту тему , но появляются два мнения:

1 - мы можем увеличить производительность вызова по ссылке, а не по значению следующим образом:

Procedure (vRefCur OUT NOCOPY SYS_REFCURSOR). 

2 - SYS_REFCURSOR уже является указателем (ссылка) и для повышения производительности необходимо оптимизировать оператор SQL.

Что вы думаете?

Заранее спасибо!

Ответы [ 2 ]

4 голосов
/ 06 марта 2019

Для SYS_REFCURSOR это не имеет никакого значения. SYS_REFCURSOR - это просто указатель, то есть размер составляет всего пару байтов.

Вы получите разницу для LOB, которая может иметь размер в несколько гига- или даже терабайт.

4 голосов
/ 06 марта 2019

Что касается производительности - большой разницы нет.

Когда NOCOPY не указано, Oracle просто создаст другую копию указателя.
Так что если вы этого не сделаетехотите иметь в системе два одинаковых указателя - укажите подсказку NOCOPY.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...