SqlLoad常用技巧总结
1、控制文件中注释用“--”
2、为防止导入出现中文乱码,在控制文件中加入字符集控制
LOAD DATA
CHARACTERSET ZHS16GBK
3、让某一列成为行号,用RECNUM关键字
- load data
- infile *
- into table t
- replace
- ( seqno RECNUM //载入每行的行号
- text Position(1:1024))
- BEGINDATA
- fsdfasj
4、过滤某一列,用FILLER关键字
- LOAD DATA
- TRUNCATE INTO TABLE T1
- FIELDS TERMINATED BY ','
- ( field1,
- field2 FILLER,
- field3
- )
5、过滤行
在INTO TABLE table_name后加WHEN过滤条件,但功能有限,如果以竖线分隔符的文件,不能实现字段级的过滤,定长的还好。
- LOAD DATA
- INFILE 'mydata.dat'
- BADFILE 'mydata.bad'
- DISCARDFILE 'mydata.dis'
- APPEND
- INTO TABLE my_selective_table
- WHEN (01) <> 'H' and (01) <> 'T' and (30:37) = '20031217'
- (
- region CONSTANT '31',
- service_key POSITION(01:11) INTEGER EXTERNAL,
- call_b_no POSITION(12:29) CHAR
- )
6、过滤首行,用OPTIONS (SKIP 1)选项
也可以写在命令行中,如:
- sqlldr sms/admin control=test.ctl skip=1
7、TRAILING NULLCOLS的使用,作用是表的字段没有对应的值时允许为空
如:
- LOAD DATA
- INFILE *
- INTO TABLE DEPT
- REPLACE
- FIELDS TERMINATED BY ','
- TRAILING NULLCOLS // 其实下面的ENTIRE_LINE在BEGINDATA后面的数据中是没有直接对应的列的值的如果第一行改为 10,Sales,Virginia,1/5/2000,, 就不用TRAILING NULLCOLS了
- (DEPTNO,
- DNAME "upper(:dname)", // 使用函数
- LOC "upper(:loc)",
- LAST_UPDATED date 'dd/mm/yyyy', // 日期的一种表达方式 还有'dd-mon-yyyy' 等
- ENTIRE_LINE ":deptno||:dname||:loc||:last_updated"
- )
- BEGINDATA
- 10,Sales,Virginia,1/5/2000
- 20,Accounting,Virginia,21/6/1999
- 30,Consulting,Virginia,5/1/2000
- 40,Finance,Virginia,15/3/2001
8、添加、修改数据
- (1)、
- LOAD DATA
- INFILE *
- INTO TABLE tmp_test
- ( rec_no "my_db_sequence.nextval",
- region CONSTANT '31',
- time_loaded "to_char(SYSDATE, 'HH24:MI')",
- data1 POSITION(1:5) ":data1/100",
- data2 POSITION(6:15) "upper(:data2)",
- data3 POSITION(16:22)"to_date(:data3, 'YYMMDD')"
- )
- BEGINDATA
- 11111AAAAAAAAAA991201
- 22222BBBBBBBBBB990112
- (2)、
- LOAD DATA
- INFILE 'mail_orders.txt'
- BADFILE 'bad_orders.txt'
- APPEND
- INTO TABLE mailing_list
- FIELDS TERMINATED BY ","
- ( addr,
- city,
- state,
- zipcode,
- mailing_addr "decode(:mailing_addr, null, :addr, :mailing_addr)",
- mailing_city "decode(:mailing_city, null, :city, :mailing_city)",
- mailing_state
- )
9、合并多行记录为一行记录
通过关键字concatenate 把几行的记录看成一行记录
- LOAD DATA
- INFILE *
- concatenate 3 // 通过关键字concatenate 把几行的记录看成一行记录
- INTO TABLE DEPT
- replace
- FIELDS TERMINATED BY ','
- (DEPTNO,
- DNAME "upper(:dname)",
- LOC "upper(:loc)",
- LAST_UPDATED date 'dd/mm/yyyy'
- )
- BEGINDATA
- 10,Sales, // 其实这3行看成一行 10,Sales,Virginia,1/5/2000
- Virginia,
- 1/5/2000
10、用”|+|”分隔符,避免数据混淆
fields terminated by "|+|"
11、如果数据文件包含在控制文件中,用INFILE *
如下:
- LOAD DATA
- INFILE *
- append
- INTO TABLE tmp_test
- FIELDS TERMINATED BY ","
- OPTIONALLY ENCLOSED BY '"'
- TRAILING NULLCOLS
- ( data1,
- data2
- )
- BEGINDATA
- 11111,AAAAAAAAAA
- 22222,"A,B,C,D,"
12、一次导入多个文件到同一个表
- LOAD DATA
- INFILE file1.dat
- INFILE file2.dat
- INFILE file3.dat
- APPEND
- INTO TABLE emp
- ( empno POSITION(1:4) INTEGER EXTERNAL,
- ename POSITION(6:15) CHAR,
- deptno POSITION(17:18) CHAR,
- mgr POSITION(20:23) INTEGER EXTERNAL
- )
13、将一个文件导入到不同的表
- (1)、
- LOAD DATA
- INFILE *
- INTO TABLE tab1 WHEN tab = 'tab1'
- ( tab FILLER CHAR(4),
- col1 INTEGER
- )
- INTO TABLE tab2 WHEN tab = 'tab2'
- ( tab FILLER POSITION(1:4),
- col1 INTEGER
- )
- BEGINDATA
- tab1|1
- tab1|2
- tab2|2
- tab3|3
- ==============
- (2)、
- LOAD DATA
- INFILE 'mydata.dat'
- REPLACE
- INTO TABLE emp
- WHEN empno != ' '
- ( empno POSITION(1:4) INTEGER EXTERNAL,
- ename POSITION(6:15) CHAR,
- deptno POSITION(17:18) CHAR,
- mgr POSITION(20:23) INTEGER EXTERNAL
- )
- INTO TABLE proj
- WHEN projno != ' '
- ( projno POSITION(25:27) INTEGER EXTERNAL,
- empno POSITION(1:4) INTEGER EXTERNAL
- )
14、过滤掉的数据文件路径指定
- /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、附:测试用控制文件
- LOAD DATA
- INFILE '/home/oracle/APS_LOAD/dat/APS_AP_CONTRACT.dat'
- TRUNCATE
- INTO TABLE AP_CONTRACT
- WHEN (01)<>'1'
- FIELDS TERMINATED BY "|"
- TRAILING NULLCOLS
- (
- AGMT_NO "(TRIM(:AGMT_NO ))",
- CONTRACT_NO FILLER, -- "(TRIM(:CONTRACT_NO ))",
- LOAN_AMT "(TRIM(:LOAN_AMT ))",
- AGMT_HOLDER "(TRIM(:AGMT_HOLDER ))",
- LOAN_TYPE_CD "(TRIM(:LOAN_TYPE_CD ))",
- CURR_CD "(TRIM(:CURR_CD ))",
- BALANCE "(TRIM(:BALANCE ))",
- LOAN_DIRC_CD "(TRIM(:LOAN_DIRC_CD ))",
- AGMT_START_DATE "(TRIM(:AGMT_START_DATE ))",
- AGMT_END_DATE "(TRIM(:AGMT_END_DATE ))",
- AGMT_BELONG_ORG_NO "(TRIM(:AGMT_BELONG_ORG_NO ))",
- MANAGER_NO "(TRIM(:MANAGER_NO ))",
- PROCESS_RATE "(TRIM(:PROCESS_RATE ))",
- INSURE_METH_TYPE_CD "(TRIM(:INSURE_METH_TYPE_CD ))",
- AGMT_SIGN_DATE "(TRIM(:AGMT_SIGN_DATE ))",
- LOAN_PROP_CD "(TRIM(:LOAN_PROP_CD ))",
- LOAN_USE_TYPE "(TRIM(:LOAN_USE_TYPE ))",
- ENTRUST_LOAN_FLAG "(TRIM(:ENTRUST_LOAN_FLAG ))",
- ENTRUST_NAME "(TRIM(:ENTRUST_NAME ))",
- FARM_LOAN_FLAG "(TRIM(:FARM_LOAN_FLAG ))",
- FARM_LOAN_TYPE_CD "(TRIM(:FARM_LOAN_TYPE_CD ))",
- LOAN_BIZ_TYPE_CD "(TRIM(:LOAN_BIZ_TYPE_CD ))",
- ID_TEST RECNUM ,
- CHAR_TEST CONSTANT '31',
- SQ "sqlldr.nextval",
- TEST_4 "TO_CHAR(SYSDATE,'YYYYMMDD HH24:MI:SS')",
- TEST_5 "(TRIM(:LOAN_BIZ_TYPE_CD)||'---'||TRIM(:AGMT_NO))"
- )
SqlLoad常用技巧总结的更多相关文章
- 【shell 大系】Linux Shell常用技巧
在最近的日常工作中由于经常会和Linux服务器打交道,如Oracle性能优化.我们数据采集服务器的资源利用率监控,以及Debug服务器代码并解决其效率和稳定性等问题.因此这段时间总结的有关Linux ...
- oracle存储过程常用技巧
我们在进行pl/sql编程时打交道最多的就是存储过程了.存储过程的结构是非常的简单的,我们在这里除了学习存储过程的基本结构外,还会学习编写存储过程时相关的一些实用的知识.如:游标的处理,异常的处理,集 ...
- Vim 常用技巧:
Vim 常用技巧: 将回车由默认的8个空格改为4个空格: 命令:set sw=4 修改tab为4空格: 命令:set ts=4 设置每一级的缩进长度: 命令:set shiftwidth=4 设置文件 ...
- JS~~~ 前端开发一些常用技巧 模块化结构 &&&&& 命名空间处理 奇技淫巧!!!!!!
前端开发一些常用技巧 模块化结构 &&&&& 命名空间处理 奇技淫巧!!!!!!2016-09-29 17 ...
- Android ListView 常用技巧
Android ListView 常用技巧 Android TextView 常用技巧 1.使用ViewHolder提高效率 ViewHolder模式充分利用了ListView的视图缓存机制,避免了每 ...
- JavaScript常用技巧总结(持续添加中...)
在我学习过程中收集的一些常用技巧: typeof x !== undifined 判断x是否已定义: x === Object(x) 判断x是否为对象: Object.keys(x).length ...
- Eclipse调试常用技巧(转)
Eclipse调试常用技巧 转自http://daimojingdeyu.iteye.com/blog/633824 1. 条件断点 断点大家都比较熟悉,在Eclipse Java 编辑区的行头双击就 ...
- AS技巧合集「常用技巧篇」
转载:http://www.apkbus.com/forum.php?mod=viewthread&tid=254723&extra=page%3D2%26filter%3Dautho ...
- iPhone不为人知的功能常用技巧,看完后才发现很多用iPhone的人实在是愧对乔布斯! - imsoft.cnblogs
很多人花了四五千买部苹果,结果只用到四五百块钱的普通手机功能. iPhone不为人知的功能,常用技巧: 网上搜集整理的iPhone快捷键操作,虽然表面上iPhone按键只有一个HOME键,大部分操作都 ...
随机推荐
- php自动添加相关文章
{pc:content action="relation" relation="$relation" id="$id" catid=&quo ...
- SQL批量插入出现 类型转换错误
1.原因:在使用SqlBulkCopy批量操作时,Map映射会出现表结点对应错误 2.解决方案:自己先建立字段映射 using (SqlConnection con = new SqlConnecti ...
- Django项目部署(阿里云)(2)--扩展
新博客地址:http://muker.net/django-server-two.html 前面的只是最简单的部署,真实情况总是更复杂一点实际流程大概是这么操作的(我这种菜鸟的想法):本地写代码-&g ...
- 使用POI对excel进行操作生成二维数组
import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import ja ...
- Codeforces 28C Bath Queue 【计数类DP】*
Codeforces 28C Bath Queue LINK 简要题意:有 n 个人等概率随机进入 m 个房间,一个房间可以有多个人,第 i 个房间有 ai 个水龙头,在一个房间的人要去排队装水,他们 ...
- 流畅设计 Fluent Design System 中的光照效果 RevealBrush,WPF 也能模拟实现啦!
UWP 才能使用的流畅设计效果好惊艳,写新的 UWP 程序可以做出更漂亮的 UI 啦!然而古老的 WPF 项目也想解解馋怎么办? 于是我动手实现了一个! 迫不及待看效果 ▲ 是不是很像 UWP 中 ...
- LeetCode 549. Binary Tree Longest Consecutive Sequence II
原题链接在这里:https://leetcode.com/problems/binary-tree-longest-consecutive-sequence-ii/description/ 题目: G ...
- Nchan 实时消息 安全配置
备注: 即时消息的安全对于我们来说是比较重要的,作者在设计Nchan 的时候已经考虑了 a. nchan_authorize_request (Hooks and Callbacks)可以集成 ...
- C#操作mysql数据库,往mysql读取或者写入数据
最近在开发的一个项目,需要将数据存贮在mysql数据库中,于是需要写一个操作mysql的帮助类,我采用的是官方的,还是先给出一个链接,后面有时间的话,继续更新. http://blog.csdn.ne ...
- FPGA的新变化
FPGA SoC通过融合FPGA和ASIC两者的元件,跨越了灵活性和性能之间的界限.但随着它们进入高安全性.任务关键型市场,它们也面临着与标准SoC相同的问题,包括在日益复杂的器件中快速传输越来越多的 ...