日々常々

ふつうのプログラマがあたりまえにしたいこと。

テーブルのデータをCSV出力する(力技そのいち)

これは試行錯誤の途中経過です。まとめ→http://d.hatena.ne.jp/irof/20100108/p2

      • -

使うのはSQL*Plusのみ。便利なツールは色々あるけれども、いつでも使えると言うわけではないので。
はじめに、「データが確認出来れば良い場合」に適した、最も単純なもの。スペースの有無とかが重要ではなく、対象テーブルも限られていて、列名も必要ではない場合。これで取得できたデータは、VARCHAR2(10)とかの項目に1文字しか入っていなくても、10バイトの横幅になります。テキスト形式で見た場合には見やすいですが、CSVとして取り込むにはちょっと微妙です。

set colsep ','
set pages 0
set feedback off
set trimspool on
set linesize 32767

spool 出力ファイル名.csv
SELECT * FROM tablename;
spool off

SQL*Plusで直接実行した場合、出力されるファイルの内容はこんな感じになります。「SQL> 」から始まる行を消したい場合は、上記内容をファイルに書いて実行するか、SQL*Plusをサイレントモードで起動する(-Sオプションを指定)と出力されません。

SQL> SELECT * FROM tablename;
a1     ,bbb    ,ccc
a2     ,       ,
a3     ,bbbbbbb,cccccccccc
SQL> spool off