Oracle SQL*Plus SPOOL出力を使ってログを取得する方法

スポンサーリンク

SPOOLを使用してログを出力する方法

基本構文は、以下になります。

SPO[OL] [file_name[.ext] [CRE[ATE] | REP[LACE] | APP[END]] | OFF | OUT]

「SPOOL ファイル名」で問い合わせの結果を任意のファイル名に出力する設定をします。
「SPOOL OFF」で出力停止の設定をします。

SPOOL ログファイル名
<出力したい処理>
SPOOL OFF

SPOOL使用例

今回は、「C:\Temp」配下のフォルダにSPOOLで取得した問い合わせ結果を出力してみます。
[file_name[.ext]には、任意のファイル名を指定します。
拡張子を指定しない場合は、「.LST」が自動で付与されます。
(私の環境では「.LST」になったけど、もしかしたら環境によって違うかもしれません\(^o^)/)
また、ファイル名の指定にパスを含めることによって任意のフォルダにファイルを作成することができます。
絶対パスでも相対パスでもどっちでもいけます。

C:\Temp>tree /f C:\Temp

C:\TEMP
 └─Work

上記のフォルダ構成で検証していきます。

ファイル名のみの場合のSPOOL出力

C:\TEMPでSQL*PLUSにログインして以下のSQLを投げます。

SPOOL ファイル名
SELECT COUNT(*) FROM TEST_TABLE;
SPOOL OFF

C:\TEMP配下に「ファイル名.LST」が作成できました。
拡張子が勝手にLSTで作成されてます。
パスも記載していないのでSQL*PLUSにログインしたときのディレクトリに作成されていますね。

C:\Temp>tree /f C:\Temp

C:\TEMP
│  ファイル名.LST
│
└─Work

以下、作成された「ファイル名.LST」の中身

SQL> SELECT COUNT(*) FROM TEST_TABLE;

  COUNT(*)                                                                      
----------                                                                      
         0                                                                      

SQL> SPOOL OFF

ファイル名+拡張子付きの場合のSPOOL出力

C:\TEMPでSQL*PLUSにログインして以下のSQLを投げます。
今回はファイル名を「ファイル名.CSV」にして拡張子をつけてみました。

SPOOL ファイル名.CSV
SELECT COUNT(*) FROM TEST_TABLE;
SPOOL OFF

C:\TEMP配下に「ファイル名.CSV」が作成できました。
拡張子を指定したので指定した拡張子になってますね。
今回もパスは記載していないのでSQL*PLUSにログインしたときのディレクトリに作成されています。

C:\Temp>tree /f C:\Temp

C:\TEMP
│  ファイル名.CSV
│  ファイル名.LST
│
└─Work

以下、作成された「ファイル名.LST」の中身です。

SQL> SELECT COUNT(*) FROM TEST_TABLE;

  COUNT(*)                                                                      
----------                                                                      
         0                                                                      

SQL> SPOOL OFF

絶対パスでフォルダを指定してSPOOL出力

C:\TEMPでSQL*PLUSにログインして以下のSQLを投げます。
今回はパス+ファイル名を「ファイル名.TXT」にしてみました。

SPOOL C:\Temp\Work\ファイル名.TXT
SELECT COUNT(*) FROM TEST_TABLE;
SPOOL OFF

C:\TEMP\Work配下に「ファイル名.TXT」が作成できました。
パスを指定したので指定したフォルダに作成されていますね。


C:\Temp>tree /f C:\Temp

C:\TEMP
│  ファイル名.CSV
│  ファイル名.LST
│
└─Work
        ファイル名.TXT

以下、作成された「ファイル名.TXT」の中身です。

SQL> SELECT COUNT(*) FROM TEST_TABLE;

  COUNT(*)                                                                      
----------                                                                      
         0                                                                      

SQL> SPOOL OFF

相対パスでフォルダを指定してSPOOL出力

C:\TEMPでSQL*PLUSにログインして以下のSQLを投げます。
今回はパス+ファイル名を「ファイル名.SQL」にしてみました。

SPOOL .\Work\ファイル名.SQL
SELECT COUNT(*) FROM TEST_TABLE;
SPOOL OFF

C:\TEMP\Work配下に「ファイル名.SQL」が作成できました。
パスを指定したので指定したフォルダに作成されていますね。
これで絶対パスでも相対パスでもどっちを指定しても大丈夫なことがわかると思います。

C:\Temp>tree /f C:\Temp

C:\TEMP
│  ファイル名.CSV
│  ファイル名.LST
│
└─Work
        ファイル名.SQL
        ファイル名.TXT

以下、作成された「ファイル名.SQL」の中身です。

SQL> SELECT COUNT(*) FROM TEST_TABLE;

  COUNT(*)                                                                      
----------                                                                      
         0                                                                      

SQL> SPOOL OFF

パスの指定でSPOOL出力する際に注意すること

パスを指定した時に存在しないフォルダを指定したり、ファイルが作成できないフォルダを指定するとエラーが発生します\(^o^)/お気をつけて!

コメント

タイトルとURLをコピーしました