PL/pgSQLからpsqlなどのクライアントにメッセージを送信します。
機能 | 説明 |
---|---|
ENABLE | このパッケージの機能を有効にします。 |
DISABLE | このパッケージの機能を無効にします。 |
SERVEROUTPUT | メッセージを送信するかを制御します。 |
PUT | メッセージを送信します。 |
PUT_LINE | メッセージに改行を付加して送信します。 |
NEW_LINE | 改行をメッセージとして送信します。 |
GET_LINE | バッファから1行読み込みます。 |
GET_LINES | バッファから複数行読み込みます。 |
DBMS_OUTPUTの各機能について説明します。
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は、PUT、PUT_LINE、NEW_LINE、GET_LINEおよびGET_LINESの使用を無効にします。
残っているバッファの情報は破棄されます。
例
PERFORM DBMS_OUTPUT.DISABLE();
SERVEROUTPUTは、メッセージを送信するかを制御します。
論理値はメッセージを送信するか否かを指定します。
“真”の論理値を指定した場合、PUT、PUT_LINE、NEW_LINEを実行すると、メッセージはpsqlなどのクライアントに送信され、バッファには格納されません。
“偽”の論理値を指定した場合、PUT、PUT_LINE、NEW_LINEを実行すると、バッファに格納されてpsqlなどのクライアントにメッセージは送信されません。
参照
論理値については“PostgreSQL文書”の“SQL言語”の“論理値データ型”を参照してください。
例
PERFORM DBMS_OUTPUT.SERVEROUTPUT(TRUE);
PUTは、送信するメッセージを設定します。
文字列は送信するメッセージです。
SERVEROUTPUTで論理値に“真”を指定した場合、メッセージはpsqlなどのクライアントに送信されます。
SERVEROUTPUTで論理値に“偽”を指定した場合、メッセージはバッファに格納されます。
PUTは改行を付加しないため、改行を付加する場合は、NEW_LINEを実行してください。
ENABLEで指定したバッファサイズを超えて、文字列を送信した場合は、エラーとなります。
例
PERFORM DBMS_OUTPUT.PUT('abc');
PUT_LINEは、送信するメッセージに改行を付加して設定します。
文字列は送信するメッセージです。
SERVEROUTPUTで論理値に“真”を指定した場合、メッセージはpsqlなどのクライアントに送信されます。
SERVEROUTPUTで論理値に“偽”を指定した場合、メッセージはバッファに格納されます。
PUT_LINEはメッセージの最終に改行を付加します。
ENABLEで指定したバッファサイズを超えて、文字列を送信した場合は、エラーとなります。
例
PERFORM DBMS_OUTPUT.PUT_LINE('abc');
NEW_LINEは、送信するメッセージに改行を設定します。
SERVEROUTPUTで論理値に“真”を指定した場合、メッセージはpsqlなどのクライアントに送信されます。
SERVEROUTPUTで論理値に“偽”を指定した場合、メッセージはバッファに格納されます。
例
PERFORM DBMS_OUTPUT.NEW_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は、バッファに格納された複数行のメッセージを取り出します。
取り出した情報は、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);
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();