• 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行。
  • 相关阅读:
    杨辉三角实现
    三种方式都能生成同样的列表
    Python 直接赋值、浅拷贝和深度拷贝解析
    Python 拷贝对象(深拷贝deepcopy与浅拷贝copy)
    教你玩转CSS 分组选择器和嵌套选择器
    教你玩转CSS padding(填充)
    教你玩转CSS 轮廓(outline)属性
    教你玩转CSS margin(外边距)
    教你玩转CSS border(边框)
    教你玩转CSS表格(table)
  • 原文地址:https://www.cnblogs.com/rusking/p/4133926.html
Copyright © 2020-2023  润新知