Spool

SPOOL コマンド

SQLPLUSのコマンド、インプットとアウトプットをファイルに残すコマンド。

SPOOL の構文(CRE, REP, APPは10gからサポートされる)

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

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

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

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

関連システム変数

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

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

… 上のスクリプトから続き

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

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

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

Reference:
http://www.shift-the-oracle.com/sqlplus/command/spool.html