zoukankan      html  css  js  c++  java
  • 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	est.txt'
    DISCARDFILE 'D:oracletest	estSqlLdr2.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	estSqlLdr2.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	est1.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	est2.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	est3.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	est1.txt'
    INFILE 'D:oracletest	est2.txt'
    INFILE 'D:oracletest	est3.txt'
    BADFILE 'D:oracletest	estSqlLdr3.bad'
    DISCARDFILE 'D:oracletest	estSqlLdr3.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	estSqlLdr3.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行。
  • 相关阅读:
    HDOJ 1846 Brave Game
    并查集模板
    HDU 2102 A计划
    POJ 1426 Find The Multiple
    POJ 3278 Catch That Cow
    POJ 1321 棋盘问题
    CF 999 C.Alphabetic Removals
    CF 999 B. Reversing Encryption
    string的基础用法
    51nod 1267 4个数和为0
  • 原文地址:https://www.cnblogs.com/rusking/p/4133926.html
Copyright © 2011-2022 走看看