SQLLoader6(一个或多个数据文件按条件导入不同的表)

测试一
1、创建表:

SQL> create table tab_b(col1 varchar2(2), col2 number(2));



表已创建。



SQL> create table tab_a(col1 varchar2(2), col2 number(2));



表已创建。



SQL> COMMIT;



提交完成。

2、数据文件:test.txt

A    1

A    2

A    3

B    3

B    2

B    1

3、控制文件:testSqlLdr2.ctl

LOAD DATA

INFILE 'D:\oracletest\test.txt'

DISCARDFILE 'D:\oracletest\testSqlLdr2.dsc'

REPLACE

INTO TABLE TAB_A

WHEN COL1="A"

(COL1 position(1:1),COL2 position(3:4))

INTO TABLE TAB_B

WHEN COL1="B"

(COL1 position(1:1),COL2 position(3:4))

4、执行导入

D:\oracletest>sqlldr scott/tiger@orcl control=D:\oracletest\testSqlLdr2.ctl



SQL*Loader: Release 11.2.0.1.0 - Production on 星期日 11月 30 21:27:16 2014



Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.



达到提交点 - 逻辑记录计数 5

达到提交点 - 逻辑记录计数 6

5、查看结果:

SQL> SELECT * FROM TAB_A;



CO COL2

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

A 1

A 2

A 3



SQL> SELECT * FROM TAB_B;



CO COL2

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

B 3

B 2

B 1

测试二
1、创建测试表

SQL> CREATE TABLE EMP_DEPT10 AS SELECT * FROM EMP WHERE DEPTNO=10 AND 1=2;



表已创建。



SQL> CREATE TABLE EMP_DEPT20 AS SELECT * FROM EMP WHERE DEPTNO=20 AND 1=2;



表已创建。



SQL> CREATE TABLE EMP_DEPT30 AS SELECT * FROM EMP WHERE DEPTNO=30 AND 1=2;



表已创建。



SQL> SELECT * FROM EMP_DEPT10;



未选定行



SQL> SELECT * FROM EMP_DEPT20;



未选定行



SQL> SELECT * FROM EMP_DEPT30;



未选定行



SQL>

2、数据文件

--D:\oracletest\test1.txt

1 7782 CLARK MANAGER 7839 1981-06-09 2450 0 10

1 7839 KING PRESIDENT 1111 1981-11-17 5000 0 10

1 7934 MILLER CLERK 7782 1982-01-23 1300 0 10

--D:\oracletest\test2.txt

2 7369 SMITH CLERK 7902 1980-12-17 800 0 20

2 7566 JONES MANAGER 7839 1981-04-02 2975 0 20

2 7788 SCOTT ANALYST 7566 1987-04-19 3000 0 20

2 7876 ADAMS CLERK 7788 1987-05-23 1100 0 20

2 7902 FORD ANALYST 7566 1981-12-03 3000 0 20

--D:\oracletest\test3.txt

3 7499 ALLEN SALESMAN 7698 1981-02-20 1600 300 30

3 7521 WARD SALESMAN 7698 1981-02-22 1250 500 30

3 7654 MARTIN SALESMAN 7698 1981-09-28 1250 1400 30

3 7698 BLAKE MANAGER 7839 1981-05-01 2850 123 30

3 7844 TURNER SALESMAN 7698 1981-09-08 1500 0 30

3 7900 JAMES CLERK 7698 1981-12-03 950 0 30

3、控制文件

LOAD DATA

INFILE 'D:\oracletest\test1.txt'

INFILE 'D:\oracletest\test2.txt'

INFILE 'D:\oracletest\test3.txt'

BADFILE 'D:\oracletest\testSqlLdr3.bad'

DISCARDFILE 'D:\oracletest\testSqlLdr3.dsc'

REPLACE

INTO TABLE EMP_DEPT10

WHEN FLAG="1" --用flag做标记

FIELDS TERMINATED BY WHITESPACE

(FLAG FILLER POSITION(1), --一定要指定POSITION(1)不能省略,只有指定POSITION(1)才能决定数据从第一列开始读取,否则会出现空值或数据列错位。

EMPNO,ENAME,JOB,MGR,HIREDATE DATE "YYYY-MM-DD" ,SAL,COMM,DEPTNO)

INTO TABLE EMP_DEPT20

WHEN FLAG="2"

FIELDS TERMINATED BY WHITESPACE

(FLAG FILLER POSITION(1), 

EMPNO,ENAME,JOB,MGR,HIREDATE DATE "YYYY-MM-DD",SAL,COMM,DEPTNO)

INTO TABLE EMP_DEPT30

WHEN FLAG="3"

FIELDS TERMINATED BY WHITESPACE

(FLAG FILLER POSITION(1), 

EMPNO,ENAME,JOB,MGR,HIREDATE DATE "YYYY-MM-DD",SAL,COMM,DEPTNO)

4、执行导入命令

D:\oracletest>sqlldr scott/tiger@orcl control=D:\oracletest\testSqlLdr3.ctl



SQL*Loader: Release 11.2.0.1.0 - Production on 星期日 11月 30 22:32:49 2014



Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.



达到提交点 - 逻辑记录计数 2

达到提交点 - 逻辑记录计数 3

达到提交点 - 逻辑记录计数 7

达到提交点 - 逻辑记录计数 8

达到提交点 - 逻辑记录计数 13

达到提交点 - 逻辑记录计数 14

5、检查导入结果

SQL> select * from emp_dept10;



EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO

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

7782 CLARK MANAGER 7839 1981-06-09 2450 0 10

7839 KING PRESIDENT 1111 1981-11-17 5000 0 10

7934 MILLER CLERK 7782 1982-01-23 1300 0 10



SQL> select * from emp_dept20;



EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO

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

7369 SMITH CLERK 7902 1980-12-17 800 0 20

7566 JONES MANAGER 7839 1981-04-02 2975 0 20

7788 SCOTT ANALYST 7566 1987-04-19 3000 0 20

7876 ADAMS CLERK 7788 1987-05-23 1100 0 20

7902 FORD ANALYST 7566 1981-12-03 3000 0 20



SQL> select * from emp_dept30;



EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO

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

7499 ALLEN SALESMAN 7698 1981-02-20 1600 300 30

7521 WARD SALESMAN 7698 1981-02-22 1250 500 30

7654 MARTIN SALESMAN 7698 1981-09-28 1250 1400 30

7698 BLAKE MANAGER 7839 1981-05-01 2850 123 30

7844 TURNER SALESMAN 7698 1981-09-08 1500 0 30

7900 JAMES CLERK 7698 1981-12-03 950 0 30



已选择6行。

 

你可能感兴趣的:(loader)