SQL

SPOOLで不要な空行を出力させない

  • このエントリーをはてなブックマークに追加

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 OFF
SET RECSEP OFF
SPOOL 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」を指定することで、そのデフォルト設定を無効にすることができます。

  • このエントリーをはてなブックマークに追加

コメントを残す

*