• Orcale 数据加载


    CSV 逗号分隔值格式文件

    1,若要加载的文件不是CSV格式,可以修改数据文件,用分隔符来替换逗号;也可以修改控制文件,将FIELDS TERMINATED BY的值改为实际的分隔符。

    eg, 要向scott.bonus表插入数据 **.dat.

    1. SMITH,CLEAK,3904

    2. ALLEN,"SALER,M",2891

    3. WARD,"SALER,""S""",3128

    4. KING,PRESIDENT,2523

    LOAD DATA

    INFILE  **.dat

    TRUNCATE INTO TABLE  BONUS

    FIELDS TERMINATED BY "," OPTIONALLOY ENCLOSED BY '"'

    (ENAME, JOB, SAL) 

    save as ldr_case2.ctl

    运行SQLLDR:

    > sqlldr scott/tiger control= ldr_case2.ctl

    2,若数据文件没有分隔符,但是定长字符串。 使用position 关键字来指定列的开始和结束位置。 如:

        position(7:15 )从第7个字符开始截止到第15个字符作为ENAME列的列值。

            position(*+2:15) *号代表相对偏移量,从上次结束的位置+2的地方开始。

            position(*)char(9): 这种方式 只需为第一列指定开始位置,其他列只需要指定列长度即可。

    1. LOAD DATA

    2. INFILE ldr_case3.dat

    3. TRUNCATE INTO TABLE BONUS

    4. (

    5. ENAME position(1:5),

    6. JOB position(7:15),

    7. SAL position(17:20)

    8.)

    SQL> DESC BONUS; //查看表结构

    3,若数据文件中的列少于将要导入的表的列。在控制文件中加入 COMM “0” 即可。

    4,若数据文件中的列多于将要导入的表的列,

      方式一: 修改数据文件,将多余的数据删除(使用于小数据量)

      方式二: 如1. SMITH  7369  CLERK  800  20

              2. ALLEN  7499  SALESMAN  1600 30

                   希望导入1、3、4 列而跳过2、5列,

               

    5,提供多个数据文件,要导入同一张表

      指定多个INFILE参数即可。2前提是提供的数据文件中的数据存放格式必须完全相同。

    6,同一个数据文件要导入不同的表,使用WHEN关键字。

      需求是将以MGR开头的记录导入MANAGER表,以BON开头的记录导入BONUS表,其他记录存入废弃文件中,

      

    :控制文件中的WHEN逻辑判断不支持OR关键字,如果判断条件有多个,使用AND连接。

     

    7,数据前N行不想导入。

    可以使用文本工具修改数据文件,linux下可以通过tail命令实现。 若不想修改数据文件,则 SKIP参数。

    SQL> SQLLDR SCOTT/TIGER CONTROL=LDR_CASE10.CTL SKIP=3 前3行不导入。 

    若 导入 4到6行, 则

    SQL> SQLLDR SCOTT/TIGER CONTROL=LDR_CASE10.CTL SKIP=4 LOAD=6

    8,要加载的数据中有换行符,复杂, 要sqlldr指明什么时候才进行换行操作。

     eg手工指定换行符, 数据文件中的换行符不是标准的换行标志。而是用户自定义的一个标志字符。这种情况下”

    LOAD DATA

    INFILE ldr case11.dat

    TRUNCATE INTO TABLE manager

    FIELDS TERMINATED BY ","

    (MGRNO MANAME,JOUB,TRMAK,

    REMARK "replace(:remark, '\n',chr(10))")

    理论知识说完,实践下。

    首先 cmd-> sqlplus dabook/dabook_localhost 

    连接dabook,

    create table manager;

     

    编辑 testData.csv 文件, 存放在E:下。

    12,Smith,manager,3600
    13,Paul ,coder,3000
    14,Lynn,tester,2000

    编辑control文件:TEST01.CTL

    LOAD DATA
    INFILE 'E: estData.csv'
    INTO TABLE MANAGER
    FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY '"'
    (MGRNO,MNAME,JOB,REMARK)

    使用show parameter control_files;命令查看已有的control文件。为了找到control的路径。一般都放在一起比较好吧。

     cmd> sqlldr system/D199033 control= E:APPDINGQIORADATATESTDABOOKTEST1.CTL 导入数据

    在去select 下 ,发现数据就进去了!

    PS:贴上我的Oracle安装地址

    。  。。

  • 相关阅读:
    Linux命令格式与修改文件权限的命令
    Linux 文件基本属性
    Linux 系统目录结构
    Linux 系统启动过程
    Linux在线学习模拟器
    jQuery做的自定义选项卡
    jQuery做的可编辑表格
    海康解码器对接总结(java 版)
    Java线程总结(二)
    Java线程总结(一)
  • 原文地址:https://www.cnblogs.com/happinessqi/p/3253173.html
Copyright © 2020-2023  润新知