GET_LINE プロシージャー - メッセージ・バッファーから 1 行を取得する

GET_LINE プロシージャーは、メッセージ・バッファーから 1 行のテキストを取得します。 テキストは、行末文字シーケンスによって終えなければなりません。

ヒント: メッセージ・バッファーに行末文字シーケンスを追加するためには、PUT_LINE プロシージャーを使用するか、PUT プロシージャーに対する一連の呼び出しを行った後に NEW_LINE プロシージャーを使用します。

構文

構文図を読む構文図をスキップするDBMS_OUTPUT.GET_LINE (line,status)

プロシージャー・パラメーター

line
メッセージ・バッファーから 1 行のテキストを戻す、タイプ VARCHAR(32672) の出力引数。
status
メッセージ・バッファーから 1 行を戻したかどうかを示す、タイプ INTEGER の出力引数。
  • 0 は、1 行が戻されたことを示します。
  • 1 は、戻された行がないことを示します。

許可

DBMS_OUTPUT モジュールに対する EXECUTE 特権。

GET_LINE プロシージャーを使用して、メッセージ・バッファーから 1 行のテキストを取得します。 この例では、proc1 によってメッセージ・バッファーにテキストが 1 行書き込まれます。 proc3 はメッセージ・バッファーからテキストを取得し、それを messages という名前の表に挿入します。 その後 proc2 を実行しますが、メッセージ・バッファーは使用不可なので、メッセージ・バッファーに追加されるテキストはありません。 SELECT ステートメントが実行されると、proc1 によって追加されたテキストだけが戻されます。

CALL DBMS_OUTPUT.ENABLE( NULL )@

CREATE PROCEDURE proc1()
BEGIN
  CALL DBMS_OUTPUT.PUT_LINE( 'PROC1 put this line in the message buffer.' );
END@

CREATE PROCEDURE proc2()
BEGIN
  CALL DBMS_OUTPUT.PUT_LINE( 'PROC2 put this line in the message buffer.' );
END@

CREATE TABLE messages ( msg VARCHAR(100) )@

CREATE PROCEDURE proc3()
BEGIN
  DECLARE line VARCHAR(32672);
  DECLARE status INT;

  CALL DBMS_OUTPUT.GET_LINE( line, status );
  while status = 0 do
    INSERT INTO messages VALUES ( line );
    CALL DBMS_OUTPUT.GET_LINE( line, status );
  end while;
END@

CALL proc1@

CALL proc3@

CALL DBMS_OUTPUT.DISABLE@

CALL proc2@

CALL proc3@

SELECT * FROM messages@
この例では、以下の出力が結果として戻ります。
MSG                                           
----------------------------------------------
PROC1 put this line in the message buffer.    

  1 record(s) selected.