Кэшируется ли вывод sys_refcursor хранимой процедуры или нет? - PullRequest
1 голос
/ 07 февраля 2012

Я разработал хранимую процедуру PL / SQL, которая возвращает sys_refcursor

create or replace procedure updateProgress( ref_out out sys_refcursor
                                           , v_context in number)
is
begin

   open ref_out 
    for select serial# serialnumber
      , time_remaining remainingtime
      , elapsed_seconds elapsedtime
      , (100 * sofar) / totalwork accomplishedpercentage
   from v$session_longops
  where target = 9 
    and target_desc = 'inserting nonsense' 
    and context = v_context;

end updateProgress;

Я собираюсь выполнить эту процедуру в течение одного сеанса несколько раз. После первого вызова каждый последующий вызов выполняет запрос снова или результат кэширования первого запроса используется повторно для последующих вызовов?

1 Ответ

2 голосов
/ 07 февраля 2012

не будет кешироваться;запрос будет выполняться для каждого вызова.

Будьте осторожны: запрос v$session_longops не очень надежный способ отслеживать ход выполнения.Возвращаемые данные не всегда полны (например, не все операторы SQL могут быть включены), и я определенно не буду полагаться на значение time_remaining;мне часто казалось, что это скорее дикая догадка, чем хорошая оценка ...

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