我开发了一个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;
我将在一个会话中多次执行此过程。在第一次调用之后,每个后续调用是否再次执行查询,或者是第一个缓存的结果是否可以重用于后续调用?
答案 0 :(得分:2)
它不会被缓存;每次调用都会执行查询。
注意:查询v$session_longops
不是监视执行进度的非常可靠的方法。返回的数据并不总是满的(例如,可能不包括所有SQL语句),我绝对不会依赖time_remaining
值;对我来说,这似乎是一个疯狂的猜测,而不是一个很好的估计......