for Excel by Excel2003
Oracle用のするツールです。 (ちょっと前に作った出力専用ツールもあります)
シートの所定の場所に値を記入した後に「出力生成ボタン」をクリックすると、CSV出力をする為のファイルを生成します。
このファイルをsql*plusから実行すると、テーブルの内容がCSV出力されます。
「入力生成ボタン」をクリックすると、CSVファイルを読み込む為のコントロールファイルを生成します。
このファイルを指定してsql*loaderを実行すると、テーブルにロードされます。
oracsv.lzh(16.6 kBYTE) [/2006-11-22]
以下のような表から、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
以下のような表から、コントロールファイルを生成します。
項目一覧は、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」を追加 |