ページの先頭行へ戻る
Enterprise Postgres 10 アプリケーション開発ガイド
FUJITSU Software

9.5.1 DBMS_OUTPUT

概要

PL/pgSQLからpsqlなどのクライアントにメッセージを送信します。

機能

機能

説明

ENABLE

このパッケージの機能を有効にします。

DISABLE

このパッケージの機能を無効にします。

SERVEROUTPUT

メッセージを送信するかを制御します。

PUT

メッセージを送信します。

PUT_LINE

メッセージに改行を付加して送信します。

NEW_LINE

改行をメッセージとして送信します。

GET_LINE

バッファから1行読み込みます。

GET_LINES

バッファから複数行読み込みます。

記述形式


9.5.1.1 機能説明

DBMS_OUTPUTの各機能について説明します。


ENABLE
  • ENABLEは、PUT、PUT_LINE、NEW_LINE、GET_LINEおよびGET_LINESの使用を有効にします。

  • 複数のENABLEを実行している場合、バッファサイズ(バイト数)は最後に指定した値になります。バッファサイズを指定する場合、2000から1000000の範囲で指定してください。

  • バッファサイズの省略値は20000です。バッファサイズにNULLを指定した場合は、1000000とみなします。

  • ENABLEを実行していない場合、PUT、PUT_LINE、NEW_LINE、GET_LINEおよびGET_LINESを実行しても無視されます。

PERFORM DBMS_OUTPUT.ENABLE(20000);

DISABLE
  • DISABLEは、PUT、PUT_LINE、NEW_LINE、GET_LINEおよびGET_LINESの使用を無効にします。

  • 残っているバッファの情報は破棄されます。

PERFORM DBMS_OUTPUT.DISABLE();

SERVEROUTPUT
  • SERVEROUTPUTは、メッセージを送信するかを制御します。

  • 論理値はメッセージを送信するか否かを指定します。

  • “真”の論理値を指定した場合、PUT、PUT_LINE、NEW_LINEを実行すると、メッセージはpsqlなどのクライアントに送信され、バッファには格納されません。

  • “偽”の論理値を指定した場合、PUT、PUT_LINE、NEW_LINEを実行すると、バッファに格納されてpsqlなどのクライアントにメッセージは送信されません。

    参照

    論理値については“PostgreSQL文書”の“SQL言語”の“論理値データ型”を参照してください。

PERFORM DBMS_OUTPUT.SERVEROUTPUT(TRUE);

PUT
  • PUTは、送信するメッセージを設定します。

  • 文字列は送信するメッセージです。

  • SERVEROUTPUTで論理値に“真”を指定した場合、メッセージはpsqlなどのクライアントに送信されます。

  • SERVEROUTPUTで論理値に“偽”を指定した場合、メッセージはバッファに格納されます。

  • PUTは改行を付加しないため、改行を付加する場合は、NEW_LINEを実行してください。

  • ENABLEで指定したバッファサイズを超えて、文字列を送信した場合は、エラーとなります。

PERFORM DBMS_OUTPUT.PUT('abc');

PUT_LINE
  • PUT_LINEは、送信するメッセージに改行を付加して設定します。

  • 文字列は送信するメッセージです。

  • SERVEROUTPUTで論理値に“真”を指定した場合、メッセージはpsqlなどのクライアントに送信されます。

  • SERVEROUTPUTで論理値に“偽”を指定した場合、メッセージはバッファに格納されます。

  • PUT_LINEはメッセージの最終に改行を付加します。

  • ENABLEで指定したバッファサイズを超えて、文字列を送信した場合は、エラーとなります。

PERFORM DBMS_OUTPUT.PUT_LINE('abc');

NEW_LINE
  • NEW_LINEは、送信するメッセージに改行を設定します。

  • SERVEROUTPUTで論理値に“真”を指定した場合、メッセージはpsqlなどのクライアントに送信されます。

  • SERVEROUTPUTで論理値に“偽”を指定した場合、メッセージはバッファに格納されます。

PERFORM DBMS_OUTPUT.NEW_LINE();

GET_LINE
  • GET_LINEは、バッファに格納された1行のメッセージを取り出します。

  • 取り出した情報は、SELECT文でline, statusの列の値として取得します。

  • lineはTEXT型です。バッファから取り出した1行のメッセージが格納されます。

  • statusはINTEGER型です。取り出した結果が格納されます。成功の場合は0、失敗の場合は1が格納されます。

  • GET_LINEまたはGET_LINESを実行し、未だバッファから取り出していないメッセージが存在する状態でPUT、PUT_LINEまたはNEW_LINEを実行すると、バッファから取り出していないメッセージは破棄されます。

DECLARE
    buff1   VARCHAR(20);
    stts1   INTEGER;
BEGIN
    SELECT line,status INTO buff1,stts1 FROM DBMS_OUTPUT.GET_LINE();

GET_LINES
  • GET_LINESは、バッファに格納された複数行のメッセージを取り出します。

  • 取り出した情報は、SELECT文でlines, numlinesの列の値として取得します。

  • linesはTEXT型です。バッファから取り出した行が格納されます。

  • numlinesはINTEGER型です。バッファから取り出した行数が格納されます。

  • 取得行数はINTEGER型です。バッファから取り出す最大行数です。

  • GET_LINEまたはGET_LINESを実行し、未だバッファから取り出していないメッセージが存在する状態でPUT、PUT_LINEまたはNEW_LINEを実行すると、バッファから取り出していないメッセージは破棄されます。

DECLARE
    buff    VARCHAR(20)[10];
    stts    INTEGER := 10;
BEGIN
    SELECT lines, numlines INTO buff,stts FROM DBMS_OUTPUT.GET_LINES(stts);

9.5.1.2 使用例

DBMS_OUTPUTの使用例を示します。

CREATE FUNCTION dbms_output_exe() RETURNS VOID AS $$
DECLARE
	buff1	VARCHAR(20);
	buff2	VARCHAR(20);
	stts1	INTEGER;
	stts2	INTEGER;
BEGIN
	PERFORM DBMS_OUTPUT.DISABLE();
	PERFORM DBMS_OUTPUT.ENABLE();
	PERFORM DBMS_OUTPUT.SERVEROUTPUT(FALSE);
	PERFORM DBMS_OUTPUT.PUT('DBMS_OUTPUT TEST 1');
	PERFORM DBMS_OUTPUT.NEW_LINE();
	PERFORM DBMS_OUTPUT.PUT_LINE('DBMS_OUTPUT TEST 2');
	SELECT line,status INTO buff1,stts1 FROM DBMS_OUTPUT.GET_LINE();
	SELECT line,status INTO buff2,stts2 FROM DBMS_OUTPUT.GET_LINE();
	PERFORM DBMS_OUTPUT.SERVEROUTPUT(TRUE);
	PERFORM DBMS_OUTPUT.PUT_LINE(buff1);
	PERFORM DBMS_OUTPUT.PUT_LINE(buff2);
END;
$$ LANGUAGE plpgsql;
SELECT dbms_output_exe();
DROP FUNCTION dbms_output_exe();