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

时间:2012-02-07 06:25:57

标签: oracle plsql

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

答案 0 :(得分:2)

它不会被缓存;每次调用都会执行查询。

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