2013-10-11 94 views
0

我試圖評估存儲過程的性能,並試圖在SQL Developer工作表中運行它。其基本思想是:確定Oracle需要多長時間才能填充遊標

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只會啓動選擇。

有沒有辦法阻塞原來的線程,直到光標被填滿?

回答

2

從你的問題的標題,「......來一補光標」,

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; 
/
相關問題