1、控制文件中注释用“--”

2、为防止导入出现中文乱码,在控制文件中加入字符集控制

LOAD DATA

CHARACTERSET ZHS16GBK 

3、让某一列成为行号,用RECNUM关键字

  1. load data
  2. infile *
  3. into table t
  4. replace
  5. ( seqno RECNUM //载入每行的行号
  6. text Position(1:1024))
  7. BEGINDATA
  8. fsdfasj

4、过滤某一列,用FILLER关键字

  1. LOAD DATA
  2. TRUNCATE INTO TABLE T1
  3. FIELDS TERMINATED BY ','
  4. ( field1,
  5. field2 FILLER,
  6. field3
  7. )

5、过滤行

在INTO TABLE table_name后加WHEN过滤条件,但功能有限,如果以竖线分隔符的文件,不能实现字段级的过滤,定长的还好。

  1. LOAD DATA
  2. INFILE 'mydata.dat'
  3. BADFILE 'mydata.bad'
  4. DISCARDFILE 'mydata.dis'
  5. APPEND
  6. INTO TABLE my_selective_table
  7. WHEN (01) <> 'H' and (01) <> 'T' and (30:37) = '20031217'
  8. (
  9. region              CONSTANT '31',
  10. service_key         POSITION(01:11)   INTEGER EXTERNAL,
  11. call_b_no           POSITION(12:29)   CHAR
  12. )

6、过滤首行,用OPTIONS (SKIP 1)选项

也可以写在命令行中,如:

  1. sqlldr sms/admin control=test.ctl skip=1

7、TRAILING NULLCOLS的使用,作用是表的字段没有对应的值时允许为空

如:

  1. LOAD DATA
  2. INFILE *
  3. INTO TABLE DEPT
  4. REPLACE
  5. FIELDS TERMINATED BY ','
  6. TRAILING NULLCOLS // 其实下面的ENTIRE_LINE在BEGINDATA后面的数据中是没有直接对应的列的值的如果第一行改为 10,Sales,Virginia,1/5/2000,, 就不用TRAILING NULLCOLS了
  7. (DEPTNO,
  8. DNAME "upper(:dname)", // 使用函数
  9. LOC "upper(:loc)",
  10. LAST_UPDATED date 'dd/mm/yyyy', // 日期的一种表达方式 还有'dd-mon-yyyy' 等
  11. ENTIRE_LINE ":deptno||:dname||:loc||:last_updated"
  12. )
  13. BEGINDATA
  14. 10,Sales,Virginia,1/5/2000
  15. 20,Accounting,Virginia,21/6/1999
  16. 30,Consulting,Virginia,5/1/2000
  17. 40,Finance,Virginia,15/3/2001

8、添加、修改数据

  1. (1)、
  2. LOAD DATA
  3. INFILE *
  4. INTO TABLE tmp_test
  5. ( rec_no                      "my_db_sequence.nextval",
  6. region                      CONSTANT '31',
  7. time_loaded                 "to_char(SYSDATE, 'HH24:MI')",
  8. data1        POSITION(1:5) ":data1/100",
  9. data2        POSITION(6:15) "upper(:data2)",
  10. data3        POSITION(16:22)"to_date(:data3, 'YYMMDD')"
  11. )
  12. BEGINDATA
  13. 11111AAAAAAAAAA991201
  14. 22222BBBBBBBBBB990112
  15. (2)、
  16. LOAD DATA
  17. INFILE 'mail_orders.txt'
  18. BADFILE 'bad_orders.txt'
  19. APPEND
  20. INTO TABLE mailing_list
  21. FIELDS TERMINATED BY ","
  22. ( addr,
  23. city,
  24. state,
  25. zipcode,
  26. mailing_addr   "decode(:mailing_addr, null, :addr, :mailing_addr)",
  27. mailing_city   "decode(:mailing_city, null, :city, :mailing_city)",
  28. mailing_state
  29. )

9、合并多行记录为一行记录

通过关键字concatenate 把几行的记录看成一行记录

  1. LOAD DATA
  2. INFILE *
  3. concatenate 3 // 通过关键字concatenate 把几行的记录看成一行记录
  4. INTO TABLE DEPT
  5. replace
  6. FIELDS TERMINATED BY ','
  7. (DEPTNO,
  8. DNAME "upper(:dname)",
  9. LOC "upper(:loc)",
  10. LAST_UPDATED date 'dd/mm/yyyy'
  11. )
  12. BEGINDATA
  13. 10,Sales, // 其实这3行看成一行 10,Sales,Virginia,1/5/2000
  14. Virginia,
  15. 1/5/2000

10、用”|+|”分隔符,避免数据混淆

fields terminated by "|+|"

11、如果数据文件包含在控制文件中,用INFILE *

如下:

  1. LOAD DATA
  2. INFILE *
  3. append
  4. INTO TABLE tmp_test
  5. FIELDS TERMINATED BY ","
  6. OPTIONALLY ENCLOSED BY '"'
  7. TRAILING NULLCOLS
  8. ( data1,
  9. data2
  10. )
  11. BEGINDATA
  12. 11111,AAAAAAAAAA
  13. 22222,"A,B,C,D,"

12、一次导入多个文件到同一个表

  1. LOAD DATA
  2. INFILE file1.dat
  3. INFILE file2.dat
  4. INFILE file3.dat
  5. APPEND
  6. INTO TABLE emp
  7. ( empno POSITION(1:4)   INTEGER EXTERNAL,
  8. ename POSITION(6:15) CHAR,
  9. deptno POSITION(17:18) CHAR,
  10. mgr    POSITION(20:23) INTEGER EXTERNAL
  11. )

13、将一个文件导入到不同的表

  1. (1)、
  2. LOAD DATA
  3. INFILE *
  4. INTO TABLE tab1 WHEN tab = 'tab1'
  5. ( tab FILLER CHAR(4),
  6. col1 INTEGER
  7. )
  8. INTO TABLE tab2 WHEN tab = 'tab2'
  9. ( tab FILLER POSITION(1:4),
  10. col1 INTEGER
  11. )
  12. BEGINDATA
  13. tab1|1
  14. tab1|2
  15. tab2|2
  16. tab3|3
  17. ==============
  18. (2)、
  19. LOAD DATA
  20. INFILE 'mydata.dat'
  21. REPLACE
  22. INTO TABLE emp
  23. WHEN empno != ' '
  24. ( empno POSITION(1:4)   INTEGER EXTERNAL,
  25. ename POSITION(6:15) CHAR,
  26. deptno POSITION(17:18) CHAR,
  27. mgr    POSITION(20:23) INTEGER EXTERNAL
  28. )
  29. INTO TABLE proj
  30. WHEN projno != ' '
  31. ( projno POSITION(25:27) INTEGER EXTERNAL,
  32. empno POSITION(1:4)   INTEGER EXTERNAL
  33. )

14、过滤掉的数据文件路径指定

  1. /opt/app/oracle/product/10.2.0/bin/sqlldr APS/APS control=/home/oracle/APS_LOAD/ctl/AP_CONTRACT.CTL LOG=/home/oracle/APS_LOAD/log/$yesterday/AP_CONTRACT_$yesterday.log bad=/home/oracle/APS_LOAD/bad/DUE_BILL_$yesterday.bad rows=10000 readsize=20000000 bindsize=20000000  DISCARD=/home/oracle/APS_LOAD/bad/discard_ts.dis

15、附:测试用控制文件

  1. LOAD DATA
  2. INFILE '/home/oracle/APS_LOAD/dat/APS_AP_CONTRACT.dat'
  3. TRUNCATE
  4. INTO TABLE AP_CONTRACT
  5. WHEN (01)<>'1'
  6. FIELDS TERMINATED BY "|"
  7. TRAILING NULLCOLS
  8. (
  9. AGMT_NO                  "(TRIM(:AGMT_NO               ))",
  10. CONTRACT_NO         FILLER, --     "(TRIM(:CONTRACT_NO           ))",
  11. LOAN_AMT                 "(TRIM(:LOAN_AMT              ))",
  12. AGMT_HOLDER              "(TRIM(:AGMT_HOLDER           ))",
  13. LOAN_TYPE_CD             "(TRIM(:LOAN_TYPE_CD          ))",
  14. CURR_CD                  "(TRIM(:CURR_CD               ))",
  15. BALANCE                  "(TRIM(:BALANCE               ))",
  16. LOAN_DIRC_CD             "(TRIM(:LOAN_DIRC_CD          ))",
  17. AGMT_START_DATE          "(TRIM(:AGMT_START_DATE       ))",
  18. AGMT_END_DATE            "(TRIM(:AGMT_END_DATE         ))",
  19. AGMT_BELONG_ORG_NO       "(TRIM(:AGMT_BELONG_ORG_NO    ))",
  20. MANAGER_NO               "(TRIM(:MANAGER_NO            ))",
  21. PROCESS_RATE             "(TRIM(:PROCESS_RATE          ))",
  22. INSURE_METH_TYPE_CD      "(TRIM(:INSURE_METH_TYPE_CD   ))",
  23. AGMT_SIGN_DATE           "(TRIM(:AGMT_SIGN_DATE        ))",
  24. LOAN_PROP_CD             "(TRIM(:LOAN_PROP_CD          ))",
  25. LOAN_USE_TYPE            "(TRIM(:LOAN_USE_TYPE         ))",
  26. ENTRUST_LOAN_FLAG        "(TRIM(:ENTRUST_LOAN_FLAG     ))",
  27. ENTRUST_NAME             "(TRIM(:ENTRUST_NAME          ))",
  28. FARM_LOAN_FLAG           "(TRIM(:FARM_LOAN_FLAG        ))",
  29. FARM_LOAN_TYPE_CD        "(TRIM(:FARM_LOAN_TYPE_CD     ))",
  30. LOAN_BIZ_TYPE_CD         "(TRIM(:LOAN_BIZ_TYPE_CD      ))",
  31. ID_TEST                       RECNUM ,
  32. CHAR_TEST                     CONSTANT '31',
  33. SQ                        "sqlldr.nextval",
  34. TEST_4                    "TO_CHAR(SYSDATE,'YYYYMMDD HH24:MI:SS')",
  35. TEST_5                    "(TRIM(:LOAN_BIZ_TYPE_CD)||'---'||TRIM(:AGMT_NO))"
  36. )

SqlLoad常用技巧总结的更多相关文章

  1. 【shell 大系】Linux Shell常用技巧

    在最近的日常工作中由于经常会和Linux服务器打交道,如Oracle性能优化.我们数据采集服务器的资源利用率监控,以及Debug服务器代码并解决其效率和稳定性等问题.因此这段时间总结的有关Linux ...

  2. oracle存储过程常用技巧

    我们在进行pl/sql编程时打交道最多的就是存储过程了.存储过程的结构是非常的简单的,我们在这里除了学习存储过程的基本结构外,还会学习编写存储过程时相关的一些实用的知识.如:游标的处理,异常的处理,集 ...

  3. Vim 常用技巧:

    Vim 常用技巧: 将回车由默认的8个空格改为4个空格: 命令:set sw=4 修改tab为4空格: 命令:set ts=4 设置每一级的缩进长度: 命令:set shiftwidth=4 设置文件 ...

  4. JS~~~ 前端开发一些常用技巧 模块化结构 &&&&& 命名空间处理 奇技淫巧!!!!!!

    前端开发一些常用技巧               模块化结构       &&&&&     命名空间处理 奇技淫巧!!!!!!2016-09-29    17 ...

  5. Android ListView 常用技巧

    Android ListView 常用技巧 Android TextView 常用技巧 1.使用ViewHolder提高效率 ViewHolder模式充分利用了ListView的视图缓存机制,避免了每 ...

  6. JavaScript常用技巧总结(持续添加中...)

    在我学习过程中收集的一些常用技巧: typeof x !== undifined 判断x是否已定义: x === Object(x)  判断x是否为对象: Object.keys(x).length ...

  7. Eclipse调试常用技巧(转)

    Eclipse调试常用技巧 转自http://daimojingdeyu.iteye.com/blog/633824 1. 条件断点 断点大家都比较熟悉,在Eclipse Java 编辑区的行头双击就 ...

  8. AS技巧合集「常用技巧篇」

    转载:http://www.apkbus.com/forum.php?mod=viewthread&tid=254723&extra=page%3D2%26filter%3Dautho ...

  9. iPhone不为人知的功能常用技巧,看完后才发现很多用iPhone的人实在是愧对乔布斯! - imsoft.cnblogs

    很多人花了四五千买部苹果,结果只用到四五百块钱的普通手机功能. iPhone不为人知的功能,常用技巧: 网上搜集整理的iPhone快捷键操作,虽然表面上iPhone按键只有一个HOME键,大部分操作都 ...

随机推荐

  1. kubeadm搭建kubernetes集群之一:构建标准化镜像

    使用docker可以批量管理多个容器,但都是在同一台电脑内进行的,这在实际生产环境中是不够用的,如何突破单机的限制?让多个电脑上的容器可以像单机上的docker-compose.yml管理的那样方便呢 ...

  2. 基本SQL命令

    1.SQL命令的使用规则 1.每条命令必须以 ; 结尾 2.SQL命令不区分字母大小写 3.使用 \c 来终止当前命令的执行 2.库的管理 1.库的基本操作 1.查看已有库 show database ...

  3. js检测三角形是否包含一个点

    pointInTriangle:function(x0, y0, x1, y1, x2, y2, x3, y3) { var divisor = (y2 - y3)*(x1 - x3) + (x3 - ...

  4. windows主机与virtualbox虚拟机下的Linux共享网络

    环境: 主机:windows7 虚拟机:virtualbox 4.2 虚拟系统:CentOS6.2 需求: 1.虚拟机linux可以共享主机网络上互联网 2.主机.虚拟机互通讯,组成一个虚拟的局域网, ...

  5. Spring 管理Filter和Servlet

    本文转载自:http://www.open-open.com/lib/view/open1417248512252.html 在使用spring容器的web应用中,业务对象间的依赖关系都可以用cont ...

  6. BZOJ 2530 Poi2011 Party 【枚举】

    BZOJ 2530 Poi2011 Party Description Byteasar intends to throw up a party. Naturally, he would like i ...

  7. Hexo+GitHub+Netlify一站式搭建属于自己的博客网站

    喜欢的话请关注我的个人博客我在马路边https://hhongwen.cn/,此文为博主原创,转载请标明出处. 更好的阅读体验请点击查看:Hexo+GitHub+Netlify一站式搭建属于自己的博客 ...

  8. CH0805 防线(秦腾与教学评估)

    题意 lsp 学习数学竞赛的时候受尽了同仁们的鄙视,终于有一天......受尽屈辱的 lsp 黑化成为了黑暗英雄Lord lsp.就如同中二漫画的情节一样,Lord lsp 打算毁掉这个世界.数学竞赛 ...

  9. mysql导入外部sql脚本的方法

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/u011043843/article/details/29689853 导入的方法分为两种:一是採用图 ...

  10. C#.NET抽象类和接口的区别?

    声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况.不能创建abstract 类的实例.然 ...