-
-
Save tearf001/b2913b114410b55294f3e3951cbe3492 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--实战用例: | |
path-to-oracle-client\BIN\sqlldr userid=用户名/密码@tns名 control=控制文件.ctl direct=y parallel=y readsize=10005008 errors=999999999 | |
--控制文件.ctl内容: | |
load data | |
CHARACTERSET 'UTF8' | |
infile "webdata20180724_wh.txt" | |
Append into table xw_tmp_to_liuling_20180725 | |
fields terminated by "," | |
trailing nullcols | |
(a,b,c) | |
-- 注列头可选,列头顺序指定,找不到就默认顺序 | |
--------------ORACLE官方内置导入命令SQLLDR介绍------------- | |
oracle通过sqlldr导入文本数据 | |
执行命令: | |
sqlldr userid=epay/epay control=/tmp/test.ctl log=/tmp/test.log data=/tmp/test.csv rows=10 | |
命令参数: | |
userid -- Oracle 的 username/password[@servicename] | |
control -- 控制文件,可能包含表的数据 | |
log -- 记录导入时的日志文件,默认为 控制文件(去除扩展名).log | |
bad -- 坏数据文件,默认为 控制文件(去除扩展名).bad | |
data -- 数据文件,一般在控制文件中指定。用参数控制文件中不指定数据文件更适于自动操作 | |
errors -- 允许的错误记录数,可以用他来控制一条记录都不能错 | |
rows -- 多少条记录提交一次,默认为 64 | |
skip -- 跳过的行数,比如导出的数据文件前面几行是表头或其他描 | |
----- 一下参数不太重要,或很少用到----- | |
load -- 要加载的逻辑记录的数目 (全部默认) | |
silent -- 运行过程中隐藏消息 (标题,反馈,错误,废弃,分区) | |
direct -- 使用直接路径 (默认 FALSE) | |
parfile -- 参数文件: 包含参数说明的文件的名称 | |
parallel -- 执行并行加载 (默认 FALSE) | |
file -- 要从以下对象中分配区的文件 | |
------以下参数为高级特性,专家模式用 | |
skip_unusable_indexes -- 不允许/允许使用无用的索引或索引分区 (默认 FALSE) | |
skip_index_maintenance -- 没有维护索引, 将受到影响的索引标记为无用 (默认 FALSE) | |
commit_discontinued -- 提交加载中断时已加载的行 (默认 FALSE) | |
bindsize -- 常规路径绑定数组的大小 (以字节计) (默认 256000) | |
readsize -- 读取缓冲区的大小 (默认 1048576) | |
external_table -- 使用外部表进行加载; NOT_USED, GENERATE_ONLY, EXECUTE (默认 NOT_USED) | |
columnarrayrows -- 直接路径列数组的行数 (默认 5000) | |
streamsize -- 直接路径流缓冲区的大小 (以字节计) (默认 256000) | |
multithreading -- 在直接路径中使用多线程 | |
resumable -- 启用或禁用当前的可恢复会话 (默认 FALSE) | |
resumable_name -- 有助于标识可恢复语句的文本字符串 | |
resumable_timeout -- RESUMABLE 的等待时间 (以秒计) (默认 7200) | |
date_cache -- 日期转换高速缓存的大小 (以条目计) (默认 1000) | |
no_index_errors -- 出现任何索引错误时中止加载 (默认 FALSE) | |
ctl脚本 | |
load data | |
append into table "T_USER_CTRL" -- 操作类型 | |
-- 1) insert --为缺省方式,在数据装载开始时要求表为空 | |
-- 2) append --在表中追加新记录 | |
-- 3) replace --删除旧记录(用 delete from table 语句),替换成新装载的记录 | |
-- 4) truncate --删除旧记录(用 truncate table 语句),替换成新装载的记录 | |
fields terminated by ' ' -- 数据分隔符 | |
trailing nullcols | |
(ID,CUST_NUM,CARD_NO,MER_DAY_AMT,MER_DAY_AMT_DATE DATE "YYYY-MM-DD HH24") | |
CSV数据 | |
1 606110048163089 6218710000005136 3 2017-01-01 | |
1 606110048163089 6218710000005136 3 2017-01-01 | |
1 606110048163089 6218710000005136 3 2017-01-01 | |
1 606110048163089 6218710000005136 3 2017-01-01 | |
复杂实例: | |
数据: | |
insert into users values(1,'Unmi',3,sysdate); | |
insert into users values(2,NULL,5,to_date('2008-10-15','YYYY-MM-DD')); | |
insert into users values(3,'隔叶黄莺',8,to_date('2009-01-02','YYYY-MM-DD')); | |
insert into users values(4,'Kypfos',NULL,NULL); | |
insert into users values(5,'不知秋',1,to_date('2008-12-23','YYYY-MM-DD')); | |
" ","USER_ID","USER_NAME","LOGIN_TIMES","LAST_LOGIN" | |
"1","1","Unmi","3","2009-1-5 20:34:44" | |
"2","2","","5","2008-10-15" | |
"3","3","隔叶黄莺","8","2009-1-2" | |
"4","4","Kypfos","","" | |
"5","5","不知秋","1","2008-12-23" | |
CTL脚本(数据存放在脚本中也可分离出) | |
OPTIONS (skip=1,rows=128) -- sqlldr 命令显示的选项可以写到这里边来,skip=1 用来跳过数据中的第一行 | |
LOAD DATA | |
INFILE * -- 因为数据同控制文件在一起,所以用 * 表示 | |
append -- 这里用了 append 来操作,在表 users 中附加记录 | |
INTO TABLE users | |
when LOGIN_TIMES<>'8' -- 还可以用 when 子句选择导入符合条件的记录 | |
Fields terminated by "," | |
trailing nullcols | |
( | |
virtual_column FILLER, --跳过由 PL/SQL Developer 生成的第一列序号 | |
user_id "user_seq.nextval", --这一列直接取序列的下一值,而不用数据中提供的值 | |
user_name "'Hi '||upper(:user_name)",--,还能用SQL函数或运算对数据进行加工处理 | |
login_times terminated by ",", NULLIF(login_times='NULL') --可为列单独指定分隔符 | |
last_login DATE "YYYY-MM-DD HH24:MI:SS" NULLIF (last_login="NULL") -- 当字段为"NULL"时就是 NULL | |
) | |
BEGINDATA --数据从这里开始 | |
,USER_ID,USER_NAME,LOGIN_TIMES,LAST_LOGIN | |
1,1,Unmi,3,2009-1-5 20:34 | |
2,2,Fantasia,5,2008-10-15 | |
3,3,隔叶黄莺,8,2009-1-2 | |
4,4,Kypfos,NULL,NULL | |
5,5,不知秋,1,2008-12-23 | |
执行命令 | |
sqlldr user/passwd@dbservice control=users.ctl |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment