SPOOLで不要な空行を出力させない方法を紹介します。
また、データに改行コードが含まれていると不要な空行が出力されるという事象の解決方法も紹介します。
SPOOLで不要な空行を出力させないサンプルSQL
テーブルから取得したデータのみをファイルに出力したい場合は、SETオプションを指定したSQLファイルを作成して、SQLファイルをSQLPLUSでスクリプト実行すると、データのみがファイルに出力されます。
ちなみにファイル出力をする場合はtsvファイルがお勧めです。エクセルへの展開が楽ですし、データとしてのカンマも意識しなくてよいです。
SAMPLE1.sqlのSQL文
SET LINES 100 SET PAGES 0 SET HEADING OFF SET TRIMSPOOL ON SET FEEDBACK OFF SET ECHO OFF SPOOL SAMPLE.tsv SELECT ID || CHR(9) || MEMO FROM TB_SAMPLE ; SPOOL OFF
@SAMPLE1.sqlをスクリプト実行
SQL> @SAMPLE1.sql 1 1行目だけ 2 1行目だけ 3 1行目だけ
上記の様に不要な空行が出力されず、データ部分のみがファイルに出力されます。
データに改行コードが含まれていても不要な空行を出力させないサンプルSQL
不要な空行が出力されてしまう例
SQL> @SAMPLE1.sql 1 1行目だけ 2 1行目 2行目 3 1行目だけ
上記の様に改行コードが含まれているデータの次レコードが空行になってしまいます。これはSPOOLあるあるですね。下記の通りに「SET RECSEP OFF」を指定すると解消することができます。
SAMPLE2.sqlのSQL文
SET LINES 100 SET PAGES 0 SET HEADING OFF SET TRIMSPOOL ON SET FEEDBACK OFF SET ECHO OFFSET RECSEP OFFSPOOL SAMPLE.tsv SELECT ID || CHR(9) || MEMO FROM TB_SAMPLE ; SPOOL OFF
@SAMPLE2.sqlのスクリプト実行
SQL> @SAMPLE2.sql 1 1行目だけ 2 1行目 2行目 3 1行目だけ
上記の通りに改行コードを含んだデータを出力しても不要な空行は出力されません。
改行コードを含んだデータを出力する際、SQLのデフォルト設定では、次レコードとの区別を付けるために空行(レコードセパレーター)が出力されるようになっているそうです。
「SET RECSEP OFF」を指定することで、そのデフォルト設定を無効にすることができます。