Oracle数据库SqlLoad常用技巧总结

Oracle数据库SqlLoad常用技巧的相关知识是本文我们主要要介绍的内容,本文我们总结了14种SqlLoad的使用技巧,并给出了测试用的文件源码,接下来我们就开始一一介绍这部分内容,希望能够对您有所帮助。

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

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

 

  1. LOAD DATA  
  2. 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)选项,也可以写在命令行中,如:

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. LOAD DATA    
  2. INFILE *    
  3. INTO TABLE tmp_test    
  4. ( rec_no                      "my_db_sequence.nextval",    
  5. region                      CONSTANT '31',    
  6. time_loaded                 "to_char(SYSDATE, 'HH24:MI')",    
  7. data1        POSITION(1:5) ":data1/100",    
  8. data2        POSITION(6:15) "upper(:data2)",    
  9. data3        POSITION(16:22)"to_date(:data3, 'YYMMDD')"    
  10. )    
  11. BEGINDATA    
  12. 11111AAAAAAAAAA991201    
  13. 22222BBBBBBBBBB990112  

 

(2)、  

 

  1. LOAD DATA    
  2. INFILE 'mail_orders.txt'    
  3. BADFILE 'bad_orders.txt'    
  4. APPEND    
  5. INTO TABLE mailing_list    
  6. FIELDS TERMINATED BY ","    
  7. ( addr,    
  8. city,    
  9. state,    
  10. zipcode,    
  11. mailing_addr   "decode(:mailing_addr, null, :addr, :mailing_addr)",    
  12. mailing_city   "decode(:mailing_city, null, :city, :mailing_city)",    
  13. mailing_state    
  14. )   

 

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. LOAD DATA    
  2. INFILE *    
  3. INTO TABLE tab1 WHEN tab = 'tab1'    
  4. ( tab FILLER CHAR(4),    
  5. col1 INTEGER    
  6. )    
  7. INTO TABLE tab2 WHEN tab = 'tab2'    
  8. ( tab FILLER POSITION(1:4),    
  9. col1 INTEGER    
  10. )    
  11. BEGINDATA    
  12. tab1|1    
  13. tab1|2    
  14. tab2|2    
  15. tab3|3    
  16. ==============  

 

(2)、  

 

  1. LOAD DATA    
  2. INFILE 'mydata.dat'    
  3. REPLACE    
  4. INTO TABLE emp    
  5. WHEN empno != ' '    
  6. ( empno POSITION(1:4)   INTEGER EXTERNAL,    
  7. ename POSITION(6:15) CHAR,    
  8. deptno POSITION(17:18) CHAR,    
  9. mgr    POSITION(20:23) INTEGER EXTERNAL    
  10. )    
  11. INTO TABLE proj    
  12. WHEN projno != ' '    
  13. ( projno POSITION(25:27) INTEGER EXTERNAL,    
  14. empno POSITION(1:4)   INTEGER EXTERNAL    
  15. )   

 

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. )   

 

关于Oracle数据库SqlLoad常用技巧的相关知识就介绍到这里了,希望本次的介绍能够对您有所收获!

【编辑推荐】

  1. Oracle学习笔记之DECODE及常用窗口函数
  2. Oracle数据库各类控制语句的使用详细介绍
  3. Oracle数据库日期范围查询的两种实现方式
  4. Oracle数据库只读模式的CACHE BUFFERS CHAINS测试
  5. Oracle 10g数据库中UNDO_RETENTION参数的使用详解

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/260622.html<

(0)
运维的头像运维
上一篇2025-05-03 06:10
下一篇 2025-05-03 06:11

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注