PR

Oracle Database SQL*Plusのspool文でファイルに追記する方法

スポンサーリンク
ORACLE

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 でも追記可能です。