SQL*Plus > SPOOL

問い合わせなどの実行結果をファイルに出力する

SPOOL は問い合わせやターミナルに表示された出力を指定したファイルに出力するためのコマンド

SPOOL コマンド

SPOOL コマンドの構文

SPOOL [file_name[.ext] [CREATE | REPLACE | APPEND]
SPOOL OFF
SPOOL OUT

[CREATE | REPLACE | APPEND ] オプションは Oracle 10g からの機能

短縮形

SPO [file_name[.ext] [CRE | REP | APP]
SPO OFF
SPO OUT

SPOOL filname の形式が出力開始設定、SPOOL OFF が出力停止設定となる。SPOOL OUT はプリンタ直接出力命令であるが Windows では利用できない。

(参考) 汎用 CSV 出力プロシージャ

ファイルの書き込み

スプールされるファイル名の拡張子を指定しなかった場合には .lst という拡張子が設定される。

SQL> SPOOL
現在はスプールしていません。
SQL> SET COLSEP ,
SQL> SET HEAD OFF
SQL> SPOOL id_name_csv_file.csv
SQL> select id ,name from account order by id ;
 
         1,小栗 有美
         2,新村 憲一
         3,茂木 拓也
         4,石山 美紀
         5,古橋 聡
 
SQL> SPOOL OFF

スプール中に SPOOL another_test.log のように別のファイルへの出力設定を行なうと一旦 SPOOL OFF されて再度 SPOOL が開始される。

ファイルの出力モードのサポート(追記書き込み)Oracle 10g

Oracle 10g より以前の SPOOL では常にファイルを上書きモードで出力していたが Oracle 10g から [CREATE | REPLACE | APPEND ] オプションが追加されて追加書き込みが標準でサポートされる。デフォルトは上書きモード。

追加書き込みで CSV 形式でファイル出力

SQL> SET HEAD OFF
SQL> SPOOL id_name_csv_file.csv APPEND
SQL> select id || ',' || name from account order by id ;
 
1,小栗 有美
2,新村 憲一
3,茂木 拓也
4,石山 美紀
5,古橋 聡
 
SQL> SPOOL OFF

SPOOL の応用例

SPOOL のファイル名に日付を入れる

SPOOL 出力には固定のファイル名を指定するが定期的に動作するバッチ処理では出力ファイル名に日付を含めたい場合がある。

---- 日付を含む ログを出力する ファイル名 'hoge_YYYYMMDD_temp.tmp' 
column log_date new_value log_date_text noprint
select to_char(sysdate,'yyyymmdd') log_date from dual;
spool hoge_&log_date_text._temp.tmp
--        ↑............↑ (&) 〜 (.) までが置換される
----
spool off
... プログラム開始
@@hoge_script.sql

関連システム変数

アンパサンド(&) マークの設定:DEFINEドット(.) マークの設定:CONCAT

SPOOL 追記書き込みエミュレート Oracle 9i

... 上のスクリプトから続き
@@hoge_script.sql
---- ログを追記モードで書き込む ( 10g 以降であれば SPOOL filename APP を使用する )
host "cat hoge_&log_date_text._temp.tmp >> hoge_&log_date_text..log"
set term on
--- 元に戻す必要がある場合、変更したパラメータ値は適宜戻す

cat コマンドは UNIX 系のコマンド Windows 系なら type に相当するもの

Oracle 10g 以上の SQL*Plus であれば標準の SPOOL コマンドのオプション で追記が可能。



スプール関連 システム変数

スプール関連

日本オラクル
■ 日本オラクル 株式会社
■ オラクルマスター資格 (オラクルマスターとは
■ 会員制(無料)の公式技術サイト