SQL*PlusでSQL実行結果をファイルへ出力する際に使用するのがspool文です。
spool文はデフォルトでは上書きされるので、既存ファイルに追記する方法を紹介します。
基本的なspool文
spoolは基本的には以下のSQLで実行します。
spool <出力ファイル名>
試しにsysdateの結果をファイルに出力してみます。
SQL> alter session set nls_date_format='YYYY/MM/DD HH24:MI:SS';
Session altered.
SQL> spool /tmp/date.txt
SQL> select sysdate from dual;
SYSDATE
-------------------
2021/03/07 18:25:16
SQL> spool off
SQL> exit
Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
■出力されたファイルを見るとSQL実行結果がspoolされていることがわかります。
[oracle@ol77 admin]$ cat /tmp/date.txt
SQL> select sysdate from dual;
SYSDATE
-------------------
2021/03/07 18:25:16
SQL> spool off
spool文での追記方法
オプションを何も付けないで既存ファイルに対してspoolすると上書きされてしまうので、既存の内容は消えてしまいます。
既存ファイルに追記したい場合は、以下のspool文で末尾にappendオプションを付与します。
spool <出力ファイル名> append
SQL> alter session set nls_date_format='YYYY/MM/DD HH24:MI:SS';
Session altered.
SQL> spool /tmp/date.txt append
SQL> select sysdate from dual;
SYSDATE
-------------------
2021/03/07 18:29:24
SQL> spool off
SQL> exit
Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
■出力されたファイルに追記されていることがわかります。
[oracle@ol77 admin]$ cat /tmp/date.txt
SQL> select sysdate from dual;
SYSDATE
-------------------
2021/03/07 18:25:16
SQL> spool off
SQL> exit
SQL> select sysdate from dual;
SYSDATE
-------------------
2021/03/07 18:29:24
SQL> spool off
append の短縮形として app でも追記可能です。