JavaScriptが無効になっています。
この状態では一部の情報が表示されず、すべての機能を利用することができません。
問い合わせなどの実行結果をファイルに出力する
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 より前の 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 追記書き込みエミュレート
... 上のスクリプトから続き
@@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 コマンドのオプション で追記が可能。
スプール関連 システム変数
スプール関連