GET_LINES プロシージャー - メッセージ・バッファーから複数行を取得する
GET_LINES プロシージャーは、メッセージ・バッファーから 1 行以上のテキストを取得し、そのテキストをコレクションとして保管します。 テキストの各行は、行末文字シーケンスによって終えなければなりません。
ヒント: メッセージ・バッファーに行末文字シーケンスを追加するためには、PUT_LINE プロシージャーを使用するか、PUT プロシージャーに対する一連の呼び出しを行った後に NEW_LINE プロシージャーを使用します。
構文
プロシージャー・パラメーター
- 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.
