HOME >> Tips >> Oracle

SQL*Plus で SELECT した結果を csv ファイルに出力する

2017/1/4
文書番号:20649



SQL Plus を使用して CSV ファイルを出力する方法です。

業務用途などで定期的にCSV出力する場合などはいろいろと要件があったりして作りこむことが多いですが、 現場でちょっとcvs出力したい場合などはこっちの方が便利かもしれません。

【操作手順】

  1. キーボードの Windwos ロゴキーを押しながら「R」キーを押します。

    クリックで拡大

  2. 「ファイル名を指定して実行」ダイアログが起動します。
    「cmd」と入力して「OK」をクリックします。

    クリックで拡大
  3. SQL Plus を起動します。

    
    sqlplus ユーザー名/パスワード@接続文字列
    

    クリックで拡大
  4. 以下のようにコマンドを実行します。
    
    set echo off
    set linesize 1000
    set pagesize 0
    set trimspool on
    set feedback off
    set colsep ','
    spool c:\temp\tab.csv
    select * from tab;
    spool off
    
    コマンドの意味は以下の通りです。
    設定値は実行環境に合わせて変更してください。
    echo off コンソールメッセージを非表示にします。
    set linesize 999 1行のサイズを指定します。
    1行に収まる程度のサイズを指定します。
    set pagesize 999 1ページの行数を指定します。
    この行数分出力されるとでセパレーターが挿入されます。
    「0」を指定すると何行出力してもセパレーターは挿入されませんが、列ヘッダも出力されなくなります。
    列ヘッダを出力しつつ、セパレーターを出力しないためには出力する行数より大きいサイズを指定します。
    trimspool on 行の右端のスペースを削除します。
    feedback off SELECTした最後に表示される「・・・行が選択されました」を非表示にします。
    colsep ',' カラム間の区切り文字を','カンマにします。
    spool c:\・・・ 指定したファイルに出力を開始します。
    spool off 出力を終了します。

【可変長の項目を可変長で出力する】


    上記の方法で出力すると可変長の項目も値の後ろにスペースが出力されます。
    それを出力させない方法です。
  • SELECT での指定時に「rtrim」を指定する。
    
    select rtrim(col1) as col1 , rtrim(col2) as col2  from tab;
    
  • SELECT でカンマを指定して実行する。
    この方法で出力すると個々の列名は出力されません。
    
    select col1 || ',' || col2  from tab;
    
  • どちらの方法も「select * from ~」は使用できないので列が多い場合は大変です。