0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

SQL*PlusのLINESIZEとSERVEROUTPUT

Posted at

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
0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?