PL/SQLプログラムから、端末に文字列を出力するにはDBMS_OUTPUTパッケージを使います。
SQL*PlusからDBMS_OUTPUTパッケージを使って画面に出力する際にはあらかじめSET SERVEROUTPUT ONを実行する必要があります。
SQL> SET SERVEROUTPUT ON
SQL> BEGIN
2 DBMS_OUTPUT.PUT_LINE('Hello world!');
3 END;
4 /
Hello world!
PL/SQLプロシージャが正常に完了しました。
DBMS_OUTPUT.PUT_LINEは指定された文字列に加えて改行コードを出力します。
SQL*Plusでは一行に書き込みできる桁数はLINESIZE設定で指定しますが、文字列の末端がスペースかどうかで動作が異なるようです。
下記の例はLINESIZE設定が80バイトの時に、82バイトの出力を行っています。行末の処理が変化しています。
SQL> SHOW LINESIZE
linesize 80
SQL> BEGIN
2 DBMS_OUTPUT.PUT_LINE('0 1 2 3 4 5 6 7 8 ');
3 DBMS_OUTPUT.PUT_LINE('12345678901234567890123456789012345678901234567890123456789012345678901234567890 ');
4 DBMS_OUTPUT.PUT_LINE('0 1 2 3 4 5 6 7 8AB');
5 DBMS_OUTPUT.PUT_LINE('12345678901234567890123456789012345678901234567890123456789012345678901234567890AB');
6 END;
7 /
0 1 2 3 4 5 6 7 8
12345678901234567890123456789012345678901234567890123456789012345678901234567890
0 1 2 3 4 5 6 7
8AB
12345678901234567890123456789012345678901234567890123456789012345678901234567890
AB
PL/SQLプロシージャが正常に完了しました。
上記動作はSET SERVEROUTPUTのオプションによって変化します。
SET SERVEROUTPUTのFORMATオプションで変化します。デフォルトはWORD_WRAPPEDで単語単位に改行します。WRAPPEDを指定すると単純にバイト単位で改行を行います。
SQL> SET SERVEROUTPUT ON FORMAT WRAPPED
SQL> BEGIN
2 DBMS_OUTPUT.PUT_LINE('0 1 2 3 4 5 6 7 8 ');
3 DBMS_OUTPUT.PUT_LINE('12345678901234567890123456789012345678901234567890123456789012345678901234567890 ');
4 DBMS_OUTPUT.PUT_LINE('0 1 2 3 4 5 6 7 8AB');
5 DBMS_OUTPUT.PUT_LINE('12345678901234567890123456789012345678901234567890123456789012345678901234567890AB');
6 END;
7 /
0 1 2 3 4 5 6 7 8
12345678901234567890123456789012345678901234567890123456789012345678901234567890
0 1 2 3 4 5 6 7 8
AB
12345678901234567890123456789012345678901234567890123456789012345678901234567890
AB
PL/SQLプロシージャが正常に完了しました。
WORD_WRAPPEDの指定はDBMS_OUTPUT.PUTプロシージャでも有効になります。75バイト書き込んだ後、スペースを含めて8バイトの文字列「 ABCDEFG」と書き込むと、単語全体が改行して出力されます。次の例はDBMS_OUTPUT.PUTプロシージャを複数回使って、改行せずに文字列を書き込んでいます。
SQL> SHOW LINESIZE
linesize 80
SQL> SHOW SERVEROUTPUT
serveroutput ON SIZE UNLIMITED FORMAT WORD_WRAPPED
SQL> BEGIN
2 DBMS_OUTPUT.PUT_LINE('0 1 2 3 4 5 6 7 8');
3 DBMS_OUTPUT.PUT_LINE('12345678901234567890123456789012345678901234567890123456789012345678901234567890');
4 DBMS_OUTPUT.PUT ('123456789012345678901234567890123456789012345678901234567890123456789012345');
5 DBMS_OUTPUT.PUT (' ABCDEFG');
6 DBMS_OUTPUT.NEW_LINE;
7 END;
8 /
0 1 2 3 4 5 6 7 8
12345678901234567890123456789012345678901234567890123456789012345678901234567890
123456789012345678901234567890123456789012345678901234567890123456789012345
ABCDEFG
PL/SQLプロシージャが正常に完了しました。
WORD_WRAPPED指定でもスペースで区切られていない場合はバイト単位で計算されて、余った部分だけが改行されます。
SQL> BEGIN
2 DBMS_OUTPUT.PUT_LINE('0 1 2 3 4 5 6 7 8');
3 DBMS_OUTPUT.PUT_LINE('12345678901234567890123456789012345678901234567890123456789012345678901234567890');
4 DBMS_OUTPUT.PUT ('123456789012345678901234567890123456789012345678901234567890123456789012345');
5 DBMS_OUTPUT.PUT ('ABCDEFG');
6 DBMS_OUTPUT.NEW_LINE;
7 END;
8 /
0 1 2 3 4 5 6 7 8
12345678901234567890123456789012345678901234567890123456789012345678901234567890
123456789012345678901234567890123456789012345678901234567890123456789012345ABCDE
FG