PR

Oracleのselect結果をcsvファイル出力する方法

Oracleコマンド使い方・活用術
記事内に広告が含まれています。

Oracleのselect結果をExcelで見やすくしたい、もしくはテキストデータとして保存したいという要望に応えるには、select文をcsv形式に変換したいものです。このcsvファイルとして出力する方法を説明します。

スポンサーリンク

Oracleのselect文は見づらい場合がある

オラクルのSQLで、テーブルデータを表示するselect文を入力した際、非常に見づらい表示結果となるケースがあります。例えば、以下のような表示結果です。

SYSCD JIK0CD NYYMD HHRCD HHNRICCD H
GS
——- ———- ——– ———- ———- –

GSKC
—–
GPDISYO
—————————————————
—–

GNHNRM
—————————————————
—–

GNSHNRCD HBDMD HHNNRYMD
———- ——– ——–
GPRKNM
—————————————————
—–
11 1

11行出力されました

この出力結果だと、以下のような問題があります。

  1. 1レコード全体が見れない
  2. 表示された値が何の項目だかわからない

この問題を解決するため、select文をcsv形式に出力する

select文の結果をcsv形式に出力するために、SQLのsetコマンドで、必要な設定変更をします。

1) SQLのsetコマンドで以下の太字の部分をそのまま入力します。

SQL> set echo off;
SQL> set linesize 1000;
SQL> set pagesize 0;
SQL> set trimspool on;
SQL> set feedback off;
SQL> set colsep ‘,’;

SQL> spool /home/select.txt;
→「spool」はテキストデータの出力を指示する定義です。


スポンサーリンク



テキストデータの出力方法

テキストデータは「spool /home/select.txt;」だけでは出力されず、下記コマンドを入力したタイミングでそれまで入力したコマンド内容がテキストへ出力されます。

SQL> spool off;

2) 以下のような結果が表示されます。さらに、「/home/select.txt」へcsv形式のテキストデータが保存されます。

OK00001, 2983,2014-11-04, 756, 40,0, 19, 1=
,1,40,
,csvfile
,csvoutput
, 19,97-08-21,97-08-25=
,setcom
,
, 17,1,

, 1,1,1,2,2,3,
2, 0, 0,

しかしこの結果だと、各項目に余計なスペースがたくさん入っています。そのままExcelで読み込ませても、このスペースは消えませんので、この余計なスペースをコマンドで消します。

スペースを取り除いたカンマ区切りの結果を出力する方法

各項目の余計なスペースを消すには、「 rtrim 」という定義を使います。

rtrim(項目名)

具体的には、select文の定義の中で、以下のような定義をします。

select rtrim(項目名A)||’,’||rtrim(項目名B) from テーブル名 order by = ソートキー;

項目と項目の間には、「 ||’,’|| 」を入力します。
パイプ2つ + シングルクォーテーション + カンマ + シングルクォーテーション + パイプ2つ

(例)
select rtrim(SSYCD)||’,’||rtrim(JIKOCD) from SJIKOT order by = HMD,JIKOCD;

具体的な定義方法

SQL> set echo off;
SQL> set linesize 1000;
SQL> set pagesize 0;
SQL> set trimspool on;
SQL> set feedback off;
SQL> set colsep ‘,’;

SQL> spool /home/select.txt;

SQL> select rtrim(SSYCD)||’,’||rtrim(JIKOCD)from SJIKOT order by = JIKOCD;

このコマンドで得られる結果

OK00001,2983,2014-11-04,756,40,0,19,1=,1,40,,csvfile,csvoutput,19,97-08-21,97-08-25=,setcom,,17,1,,1,1,1,2,2,3,2,0,0,

このように、先にお見せしたcsv出力結果の余分なスペースが消えた状態となり、Excelにもスッキリとした形で読み込めます。