おらくるのいる生活

OracleのDBAとしての、障害対応やらパフォーマンス・チューニングやらの日々を綴っています

SQL*Plusの出力を見やすくする方法

例えばこんなSelect文を実行したとします。 

SQL> select username,PROGRAM,STATE,OSUSER from v$session where type='USER';

USERNAME                 PROGRAM
------------------------------ ------------------------------------------------
STATE             OSUSER
------------------- ------------------------------
DBSNMP                      JDBC Thin Client
WAITING         oracle

DBSNMP                     JDBC Thin Client
WAITING         oracle

SYS                             oraagent.bin@testdb01 (TNS V1-V3)
WAITING          oracle


USERNAME                 PROGRAM
------------------------------ ------------------------------------------------
STATE             OSUSER
------------------- ------------------------------
SYS                             oraagent.bin@testdb01 (TNS V1-V3)
WAITING         oracle

TEST                          sqlplus@testdb01 (TNS V1-V3)
WAITED SHORT TIME oracle

DBSNMP                     JDBC Thin Client
WAITING          oracle


6行が選択されました。

このままでは見にくいので、column <カラム名> format やら、set line やらで見やすく整えます。

SQL> col OSUSER for a10
SQL> col USERNAME for a10
SQL> set line 100
SQL> /

USERNAME PROGRAM                                         STATE                         OSUSER
----------         ------------------------------------------------  -------------------               ----------
DBSNMP      JDBC Thin Client                                 WAITING                      oracle
                     oracle@testdb01 (J001)                       WAITING                      oracle
DBSNMP      JDBC Thin Client                                 WAITING                       oracle
SYS              oraagent.bin@testdb01 (TNS V1-V3)  WAITING                       oracle
SYS              oraagent.bin@testdb01 (TNS V1-V3)  WAITING                       oracle
TEST            sqlplus@testdb01 (TNS V1-V3)           WAITED SHORT TIME oracle
                     oracle@testdb01 (J000)                       WAITING                       oracle
DBSNMP     JDBC Thin Client                                  WAITING                        oracle

8行が選択されました。

と言っても、カラム数が多いと面倒だし、select * from みたいな文だとこの方法では対処しきれないですよね。

そういう時に便利な小技です。

 

Oracle 8i 以降であれば、SE,EE、プラットフォーム無関係で使用できます。

やり方は以下の通りです。

SQL> set markup html on
SQL&gt; spool /work/test.xls
<br>
SQL&gt; select * from v$session where type='USER';
<br>
<p>
<table border='1' width='90%' align='center' summary='Script output'>
<tr>
<th scope="col">
SADDR
</th>
<th scope="col">
SID
</th>
<th scope="col">
SERIAL#
</th>
(略)

</td>
<td align="right">
0
</td>
<td>
&nbsp;
</td>
</tr>
</table>
<p>

6行が選択されました。<br>
<br>


SQL&gt; spool off
<br>
SQL&gt; set markup html off
<br>
SQL>

 見ての通り、html モードで出力している訳ですが、なぜ拡張子が.xls かと言うと、そのままExcelの表として開けるからです。

 

実際にやってみると警告が表示されますが、

Excel警告画面

Excel警告画面

構わずに開きます。

ちゃんとExcelの表になっています。

Excelを開いたところ

Excelを開いたところ

ももちろんsqlplusからExcel形式で出力される訳ではなく、中身はあくまでhtmlファイルなので、保存時に形式を.html から .xls に変更します。 

名前を付けて保存画面(デフォルト)

名前を付けて保存画面(デフォルト)

名前を付けて保存画面(xls指定)

名前を付けて保存画面(xls指定)

変更しておかないと開くたびに先ほどの警告が表示されて鬱陶しいので変更しておきましょう。

ちなみにsqlplusからの出力時に.xlsx を指定すると開けなくなりますが、中身はあくまでhtmlファイルなので、拡張子を変更して開けばOKです。

保存時には.xls,.xlsxどちらでも構いません。