0

ストアド プロシージャのパフォーマンスを評価しようとしており、それを 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は選択を開始するだけなので、これを想定しています。

カーソルがいっぱいになるまで元のスレッドをブロックする方法はありますか?

4

1 に答える 1

2

あなたの質問のタイトルから、「...カーソルを埋めるために」、

cursor oracle はポインターとして意味することができます。

定義から: カーソルは、プライベート SQL 領域のハンドルまたは名前です。これは、解析されたステートメントと処理用のその他の情報を保持するメモリ内の領域です。

これはよりよく説明します: OraFAQ

少し変更して: from: 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; 
/
于 2013-10-11T04:47:13.470 に答える