Oracleには、CSVファイルを読み込むSQL*Loaderというユーティリティは存在するが、
その逆のCSVファイルを書き出すユーティリティは存在しない。
SQL*Plusを使用してCSVファイルを作成する例を以下に示す。
OracleのScottユーザのemp表を例にする。
emp表は以下のように定義されている。
SQL> desc 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)
CSVファイルを作成する為に以下を実行する。
SQL> set echo off
SQL> set heading off
SQL> set termout off
SQL> set pause off
SQL> set pagesize 0
SQL> set linesize 80
SQL> set feedback off
SQL> spool emp.csv
SQL> select empno || ',' || ename || ',' ||
2 job || ',' || sal from emp;
7369,SMITH,CLERK,800
7499,ALLEN,SALESMAN,1600
7521,WARD,SALESMAN,1250
7566,JONES,MANAGER,2975
7654,MARTIN,SALESMAN,1250
7698,BLAKE,MANAGER,2850
7782,CLARK,MANAGER,2450
7788,SCOTT,ANALYST,3000
7839,KING,PRESIDENT,5000
7844,TURNER,SALESMAN,1500
7876,ADAMS,CLERK,1100
7900,JAMES,CLERK,950
7902,FORD,ANALYST,3000
7934,MILLER,CLERK,1300
SQL> spool off
以上の操作によりemp.csvという名前でCSVファイルが作成される。
WindowsのSQL*Plusの場合は、SQL*Plusの実行ファイルが格納されている
ディレクトリにCSVファイルが作成される。
オプションやSQLを変更して、作成するCSVファイルを変更する方法を以下に説明する。
- 各項目をダブルクォートで括りたい場合
SQL文を以下のように変更する。
SQL> select '"' || empno || '","' || ename || '","' ||
2 job || '","' || sal || '"' from emp;
上記のSQL文により作成されるデータは、以下のようになる。
"7369","SMITH","CLERK","800"
"7499","ALLEN","SALESMAN","1600"
"7521","WARD","SALESMAN","1250"
"7566","JONES","MANAGER","2975"
"7654","MARTIN","SALESMAN","1250"
"7698","BLAKE","MANAGER","2850"
"7782","CLARK","MANAGER","2450"
"7788","SCOTT","ANALYST","3000"
"7839","KING","PRESIDENT","5000"
"7844","TURNER","SALESMAN","1500"
"7876","ADAMS","CLERK","1100"
"7900","JAMES","CLERK","950"
"7902","FORD","ANALYST","3000"
"7934","MILLER","CLERK","1300"
- 各レコードの改行位置を変更する場合
以下のパラメータを変更する。
set linesize 100
改行位置を100バイト目にする。
- 作成するCSVファイル名を変更する場合
以下のパラメータを変更する。
spool emp.csv
- CSVファイル名の先頭行に列見出しを入れる場合
以下のパラメータを変更する。
set heading on