我正在尝试评估存储过程的性能,我正在尝试在SQL Developer工作表中运行它。基本思路是:
DECLARE
some_cursor SYS_REFCURSOR;
...
BEGIN
dbms_output.put_line('BEGIN: ' || TO_CHAR(CURRENT_TIMESTAMP, 'DD-MON-YYYY HH12:MI:SSxFF TZH:TZM'));
OPEN some_cursor FOR (...);
dbms_output.put_line('END: ' || TO_CHAR(CURRENT_TIMESTAMP, 'DD-MON-YYYY HH12:MI:SSxFF TZH:TZM'));
END;
两个时间戳都是一样的;我假设这是因为调用OPEN some_cursor FOR
只会启动选择。
有没有办法阻止原始线程,直到光标被填满?
答案 0 :(得分:2)
从你的问题标题,“......填充光标”,
oracle的 cursor
可以作为指针,
从定义来看: 游标是私有SQL区域的句柄或名称 - 内存中包含已解析语句和其他信息以供处理的区域。
这将更好地解释:OraFAQ
稍作修改:来自:here
set serveroutput on
DECLARE
l_cur SYS_REFCURSOR;
l_col VARCHAR2 (10);
BEGIN
OPEN l_cur FOR
SELECT 'Hi there'||LEVEL col
from dual
where 1 = 1
CONNECT BY LEVEL <= 20;
DBMS_OUTPUT.PUT_LINE('Opened cursor');
dbms_output.put_line('BEGIN: ' || TO_CHAR(CURRENT_TIMESTAMP, 'DD-MON-YYYY HH12:MI:SSxFF TZH:TZM'));
<<cursor_loop>>
loop
fetch l_cur into l_col;
DBMS_OUTPUT.PUT_LINE('Fetched from cursor');
EXIT cursor_loop WHEN l_cur%NOTFOUND;
DBMS_OUTPUT.PUT_LINE('Process data fetched from cursor');
end loop; -- cursor_loop
dbms_output.put_line('END: ' || TO_CHAR(CURRENT_TIMESTAMP, 'DD-MON-YYYY HH12:MI:SSxFF TZH:TZM'));
CLOSE l_cur;
dbms_output.put_line('Closed cursor');
end;
/