S-JIS[2004-10-30/2006-11-22]

Oracle CSV入出力ファイル 生成ツール

for Excel by Excel2003

Oracle用の

するツールです。 (ちょっと前に作った出力専用ツールもあります)

シートの所定の場所に値を記入した後に「出力生成ボタン」をクリックすると、CSV出力をする為のファイルを生成します。
このファイルをsql*plusから実行すると、テーブルの内容がCSV出力されます。
「入力生成ボタン」をクリックすると、CSVファイルを読み込む為のコントロールファイルを生成します。
このファイルを指定してsql*loaderを実行すると、テーブルにロードされます。

oracsv.lzh(16.6 kBYTE) [/2006-11-22]


CSV出力

以下のような表から、SQL文を生成します。
項目一覧は、sql*plusからdescコマンドを使って表示したものをそのままコピー&ペーストするだけでOKです。

  A B C D E  F 
1 CSV出力 SQLファイル名: c:\emp\emp_out.sql      
2 CSVファイル名: emp.csv      
3 項目名有無: TRUE      
4 WHERE条件: SAL>0      
5 ソート: EMPNO      
6 CSV入力 CTLファイル名: c:\emp\emp_in.ctl      
7 CSVファイル名: emp.csv      
8 BADファイル名: emp.bad      
9 モード: TRUNCATE      
10 スキップレコード数: 1      
11 ロードレコード数:        
12 許容エラー数: -1      
13 何件毎にコミット: -1      
14   テーブル名: EMP ↓CSV出力関数 ↓CSV入力関数  
15   項目 EMPNO      
16     ENAME      
17     JOB      
18     MGR      
19     HIREDATE TO_CHAR(HIREDATE,'YYYY/MM/DD HH24:MI:SS') "TO_DATE(:HIREDATE,'YYYY/MM/DD HH24:MI:SS')"  
20     SAL      
21     COMM      
22     DEPTNO      
23            


c:\emp\emp_out.sql

set heading off
set feedback off
set trimspool on
set termout off
set echo off
set pages 0
set line 9999
spool emp.csv
select 'EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO' from dual;
select
EMPNO ||','||
ENAME ||','||
JOB ||','||
MGR ||','||
TO_CHAR(HIREDATE,'YYYY/MM/DD HH24:MI:SS') ||','||
SAL ||','||
COMM ||','||
DEPTNO
from EMP
where SAL>0
order by EMPNO;
spool off


sql*plusから、このコマンドファイルを実行

$ sqlplus scott/tiger@SID @emp_out.sql
$ ls
emp.csv


emp.csv

EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO
7369,SMITH,CLERK,7902,1980/12/17 00:00:00,800,,20
7499,ALLEN,SALESMAN,7698,1981/02/20 00:00:00,1600,300,30
7521,WARD,SALESMAN,7698,1981/02/22 00:00:00,1250,500,30
7566,JONES,MANAGER,7839,1981/04/02 00:00:00,2975,,20
7654,MARTIN,SALESMAN,7698,1981/09/28 00:00:00,1250,1400,30
7698,BLAKE,MANAGER,7839,1981/05/01 00:00:00,2850,,30
7782,CLARK,MANAGER,7839,1981/06/09 00:00:00,2450,,10
7788,SCOTT,ANALYST,7566,1987/04/19 00:00:00,3000,,20
7839,KING,PRESIDENT,,1981/11/17 00:00:00,5000,,10
7844,TURNER,SALESMAN,7698,1981/09/08 00:00:00,1500,0,30
7876,ADAMS,CLERK,7788,1987/05/23 00:00:00,1100,,20
7900,JAMES,CLERK,7698,1981/12/03 00:00:00,950,,30
7902,FORD,ANALYST,7566,1981/12/03 00:00:00,3000,,20
7934,MILLER,CLERK,7782,1982/01/23 00:00:00,1300,,10

CSV入力

以下のような表から、コントロールファイルを生成します。
項目一覧は、sql*plusからdescコマンドを使って表示したものをそのままコピー&ペーストするだけでOKです。

  A B C D E  F 
1 CSV出力 SQLファイル名: c:\emp_out.sql      
2 CSVファイル名: emp.csv      
3 項目名有無: TRUE      
4 WHERE条件: SAL>0      
5 ソート: EMPNO      
6 CSV入力 CTLファイル名: c:\emp\emp_in.ctl      
7 CSVファイル名: emp.csv      
8 BADファイル名: emp.bad      
9 モード TRUNCATE      
10 スキップレコード数: 1      
11 ロードレコード数:        
12 許容エラー数: -1      
13 何件毎にコミット: -1      
14   テーブル名: EMP ↓CSV出力関数 ↓CSV入力関数  
15   項目 EMPNO      
16     ENAME      
17     JOB      
18     MGR      
19     HIREDATE TO_CHAR(HIREDATE,'YYYY/MM/DD HH24:MI:SS') "TO_DATE(:HIREDATE,'YYYY/MM/DD HH24:MI:SS')"  
20     SAL      
21     COMM      
22     DEPTNO      
23            


c:\emp\emp_in.ctl

OPTIONS(SKIP=1,ERRORS=-1,ROWS=-1)
LOAD DATA
INFILE 'emp.csv'
BADFILE 'emp.bad'
TRUNCATE
INTO TABLE EMP
FIELDS TERMINATED BY ','
TRAILING NULLCOLS
(
EMPNO,
ENAME,
JOB,
MGR,
HIREDATE "TO_DATE(:HIREDATE,'YYYY/MM/DD HH24:MI:SS')",
SAL,
COMM,
DEPTNO
)


sql*loaderから、このコントロールファイルを使ってロード

C:\emp>sqlldr scott/tiger@SID control=emp_in.ctl

修正履歴

2004-11-15 「CSV入力」に「スキップレコード数」「ロードレコード数」「許容エラー数」「何件毎にコミット」を追加
2006-11-22 「CSV出力」で生成されるSQLファイルに「set echo off」を追加

自作ソフトページに戻る
メールの送信先:ひしだま