はじめに
SQLPLUSで実行して、CSV形式が欲しい。。そんなときがありました。
検索してみると、以下の方がご紹介してくれていて、「SET MARKUP CSV ON」便利!と思ったのですが。
11gだったので、使えない。
なので、ちょっとした小細工をしたので、残します。
悩みポイント
SQLPLUSのオプションで色々やれると思うのですが、やりきれない部分になります。
1.空白が入ってしまう(VARCHAR2(50)にも関わらず、long_name11の後に空白がある。)
2.ヘッダが省略されてしまう(created_at なのに、CREATED_A)
3.データとヘッダーの間に「----」が入ってしまう。
SQL> select long_name_1, long_name_2, created_at from qiita_test_table;
LONG_NAME_1 LONG_NAME_2 CREATED_A
-------------------------------------------------- -------------------------------------------------- ---------
long_name11 long_name12 09-JUL-25
long_name21 long_name22 09-JUL-25
long_name31 long_name32 09-JUL-25
小細工
※ SELECTするカラムがたくさんある場合は、エラーになると思われます。
こんな感じで、「set heading off」でSQLPLUSのヘッダーをOFFにする。
SQLとしては、ヘッダー行とデータ行をUNION ALL でつなぐ。
SQL> set heading off
SQL> select 'long_name_1,long_name_2,created_at' from dual
union all
select long_name_1 || ',' || long_name_2 || ',' || created_at from qiita_test_table; 2 3
long_name_1,long_name_2,created_at
long_name11,long_name12,09-JUL-25
long_name21,long_name22,09-JUL-25
long_name31,long_name32,09-JUL-25