首页 文章

是否缓存了存储过程的sys_refcursor输出?

提问于
浏览
1

我开发了一个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

    它不会被缓存;将为每个调用执行查询 .

    注意:查询 v$session_longops 不是监视执行进度的非常可靠的方法 . 返回的数据并不总是满的(例如,可能不包括所有SQL语句),我绝对不会依赖 time_remaining 值;对我来说,这似乎是一个疯狂的猜测,而不是一个很好的估计......

相关问题