<作成環境>
OS : Windows98
DB : Oracle8
SQL*Plus : Release 3.3.2.0.2
<画面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 ---------------- 列見出しを日本語にして,(カンマ)区切りで抽出 SELECT ---------------- 各列のデータを,(カンマ)区切りで抽出 SPOOL OFF ------------- スプール終了 SET ECHO ON ----------- デフォルト値へ戻す(以下、同様に) |
きちんと打ち込めましたか?
ファイルの保存先はSQL*Plusの実行ファイルが格納されているディレクトリにしてください。
csvファイルも同じ場所に作成されます。
それではさっそく実行してみましょう。
SQL*Plusに戻り、いま作成した「make_csv.sql」ファイルを実行します。
SQL> の後に以下のような@コマンドを入力してください。
<画面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になっています。スプール後に戻しておくことをお勧めします。