zoukankan      html  css  js  c++  java
  • SqlLoad常用技巧总结

    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. )  
  • 相关阅读:
    Linux GCC
    操作系统中的一些数据结构
    《C程序设计》指针部分学习记录-易混点
    操作系统原理与实践-试验2操作系统的引导记录
    输入字符串测试
    实模式和保护模式
    Unity周记: 2020.07.06-07.12
    Unity论坛问答-如何裁剪一个多边形
    Unity论坛问答-如何让Camera.ScreenToWroldPoint在XZ平面上移动
    Unity杂谈-SRP为什么不再使用CG
  • 原文地址:https://www.cnblogs.com/bdzwater/p/3731425.html
Copyright © 2011-2022 走看看