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

GET_LINES プロシージャーは、メッセージ・バッファーから 1 行以上のテキストを取得し、そのテキストをコレクションとして保管します。 テキストの各行は、行末文字シーケンスによって終えなければなりません。

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

構文

構文図を読む構文図をスキップするDBMS_OUTPUT.GET_LINES (lines,numlines)

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

lines
メッセージ・バッファーから複数行のテキストを戻す、タイプ DBMS_OUTPUT.CHARARR の出力引数。 タイプ DBMS_OUTPUT.CHARARR は、内部的には VARCHAR(32672) ARRAY[2147483647] 配列として定義されています。
numlines
タイプ INTEGER の入出力引数。 入力として使用される場合、メッセージ・バッファーから取り出される行数を指定します。 出力として使用される場合、メッセージ・バッファーから取り出された実際の行数を示します。 numlines の出力値が入力値より小さい場合、メッセージ・バッファーにはまったく行が残っていません。

許可

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

GET_LINES プロシージャーを使用して、メッセージ・バッファーから複数行のテキストを取得し、配列にそのテキストを保管します。 配列内のテキストは、表に挿入し、照会することができます。

CALL DBMS_OUTPUT.ENABLE( NULL )@

CREATE PROCEDURE proc1()
BEGIN
  CALL DBMS_OUTPUT.PUT_LINE( 'PROC1 put this line in the message buffer.' );
  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 lines DBMS_OUTPUT.CHARARR;
  DECLARE numlines INT DEFAULT 100;
  DECLARE i INT;

  CALL DBMS_OUTPUT.GET_LINES( lines, numlines );
  SET i = 1;
  WHILE i <= numlines DO
    INSERT INTO messages VALUES ( lines[i] );
    SET i = i + 1;
  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.  
PROC1 put this line in the message buffer 

  2 record(s) selected.