ホームに戻る
著作権・免責 事項

☆SQL*Plusを用いてcsvファイルを作成する
 

<作成環境>
OS : Windows98
DB : Oracle8
SQL*Plus : Release 3.3.2.0.2


csvファイルの作成にあたり、以下、Oracleのサンプルベータベースを例に使って進めます。
SQL*Plusを起動し、「SCOTTユーザ」でログオンしてください。
次のような画面になることを確認します。

<画面1>


SQL*Plus: Release 3.3.2.0.2 - Production on Mon Jun 04 14:47:09 2001



Copyright (c) Oracle Corporation 1979, 1994.  All rights reserved.





接続:

Oracle8 Release 8.0.3.0.0 - Production

With the Partitioning and Objects options

PL/SQL Release 8.0.3.0.0 - Production



SQL> 

					
 


次に、サンプルデータベース内の「EMPテーブル」の定義を確認します。
今回はこの「EMPテーブル」をもとに、csvファイルを作成していきます。
SQL> の後に、以下のようなDESCRIBEコマンドを入力してください。

<画面2>

SQL> DESCRIBE EMP

 名前                            Null?    データ型

 ------------------------------- -------- -----------

 EMPNO                           NOT NULL NUMBER(4)

 ENAME                                    VARCHAR2(10)

 JOB                                      VARCHAR2(9)

 MGR                                      NUMBER(4)

 HIREDATE                                 DATE

 SAL                                      NUMBER(7,2)

 COMM                                     NUMBER(7,2)

 DEPTNO                                   NUMBER(2)



SQL> 

                                        
 


テーブル定義が確認できたので、次にデータをどのような形でcsvファイルに出力するかを考えます。
今回は、例として、次のような方針で出力させることにします。

・「EMPテーブル」の列見出し(例:ENAME、JOB など)を日本語にする。
・抽出する項目は「EMPNO」「ENAME」「JOB」「DEPTNO」の4項目。  

 


方針をもとに、csvファイルの作成処理を、スクリプトの中にまとめて記述します。
スクリプトとは、拡張子が「.sql」のファイルであり、「@ファイル名」で実行されるものです。
メモ帳やエディタなどで以下のプログラムを作成し、名前をつけて保存してください。
今回は、例として、「make_csv.sql」という名前のファイルにします。
また、作成されるcsvファイルの名前は、「emp.csv」にします。

※プログラム中の赤字は便宜的に付加したコメントです。打ち込まないで下さい。
  以下のプログラム「make_csv.sql」は、ここ からダウンロードできます。

<csvファイル作成プログラム> ファイル名 make_csv.sql

SET ECHO OFF ---------- @実行時に、作成されるファイル内へのコマンド表示を抑止
SET FEEDBACK OFF ------ 問合せで戻されるレコード数の表示を抑止
SET HEADING OFF ------- レポートへの列見出しの表示を抑止
SET PAGESIZE 0 -------- 各ページの行数の制御(ゼロで、フォーマット情報を無視)
SET TERMOUT OFF ------- ファイルから実行したコマンドによる出力の表示を抑止
SET TRIMSPOOL ON ------ スプール行の後続空白の処理(オンで、削除)

SPOOL emp.csv --------- csvファイル「emp.csv」へのスプール開始

SELECT ---------------- 列見出しを日本語にして,(カンマ)区切りで抽出
'社員番号' || ',' ||
'社員名' || ',' ||
'職種' || ',' ||
'部署名'
FROM EMP WHERE ROWNUM < 2;

SELECT ---------------- 各列のデータを,(カンマ)区切りで抽出
EMPNO || ',' ||
ENAME || ',' ||
JOB || ',' ||
DEPTNO
FROM EMP;

SPOOL OFF ------------- スプール終了

SET ECHO ON ----------- デフォルト値へ戻す(以下、同様に)
SET FEEDBACK ON -------
SET HEADING ON --------
SET PAGESIZE 24 -------
SET TERMOUT ON --------
SET TRIMSPOOL OFF -----

 

きちんと打ち込めましたか?
ファイルの保存先はSQL*Plusの実行ファイルが格納されているディレクトリにしてください。
csvファイルも同じ場所に作成されます。
それではさっそく実行してみましょう。  

 


SQL*Plusに戻り、いま作成した「make_csv.sql」ファイルを実行します。
SQL&GT; の後に以下のような@コマンドを入力してください。

<画面3>

SQL> @make_csv.sql

                                        

エンターを押した後、次のように表示されれば正常にスプールされています。

<画面4>

SQL> SET TRIMSPOOL OFF

SQL>

                                        
 

 


作成されたcsvファイルを確認してみましょう。
エクスプローラ等からファイルを選択し、メモ帳やエディタで開いてください。
以下のようになっていれば大成功です。

<csvファイル> ファイル名 emp.csv

社員番号,社員名,職種,部署名
7369,SMITH,CLERK,20
7499,ALLEN,SALESMAN,30
7521,WARD,SALESMAN,30
7566,JONES,MANAGER,20
7654,MARTIN,SALESMAN,30
7698,BLAKE,MANAGER,30
7782,CLARK,MANAGER,10
7788,SCOTT,ANALYST,20
7839,KING,PRESIDENT,10
7844,TURNER,SALESMAN,30
7876,ADAMS,CLERK,20
7900,JAMES,CLERK,30
7902,FORD,ANALYST,20
7934,MILLER,CLERK,10
7987,SMITH,CLERK,20
 

このファイルをエクセル上で開くと、各セルにきちんとデータが格納されていることが分かります。
見やすいエクセル表になるように、いろいろと編集してみてください。
 


1行に表示される文字数の合計を変更したい場合は「SET LINESIZE n」を使います。
スクリプト内に以下のコマンドを追加してください。

  例)SET LINESIZE 500 ------ 1行の合計文字数を半角500文字に設定
    ※デフォルト値は80になっています。スプール後に戻しておくことをお勧めします。

また、NUMBER型で定義された数値の表示幅を変更したい場合は「SET NUMWIDTH n」を使います。

  例)SET NUMWIDTH 20 ------- 数値の表示幅を半角20文字に設定
    ※デフォルト値は10になっています。スプール後に戻しておくことをお勧めします。

 


Copyright (C) 1999 System Infinity Corporation. All rights reserved.