SQL*LOADER是ORACLE的数据加载工具,通常用来将操作系统文件(数据)迁移到ORACLE数据库中。SQL*LOADER是大型数据仓库选择使用的加载方法,因为它提供了最快速的途径(DIRECT,PARALLEL)。
语法: SQLLDR keyword=value [,keyword=value,...];
1. 写CTL 控制文件
2. 在cmd 命令窗口中写入导入语句
CTL 控制文件(后缀名.ctl)的内容 :
load data --1. 控制文件标识
infile 'xxx.txt' --2. 要导入的数据文件名
insert into table test --3. 将文件插入到数据库的 test 表中
fields terminated by X'09' --4. 用于分割一行中各个属性值的符号(例如每个属性值用逗号分割,那么就把 X'09' 改为 ',')
(id , username ,passwprd ,......) --5. test表中对应的属性名
例:
load data infile 'E:/user_data_one_week/zhejiang_user_data.log' insert into table day_data fields terminated by '|' trailing nullcols --(数据中某些属性可能是null值,如果不加入这行导入到数据库的时候就会自动跳过null值的列, 这样数据插入后就会属性和值对应不上) (time, user_id, type, longitude, latitude, height, content char(10000))
补充几点
1. 在第三步中运用了 insert into table,除此之外,还有以下几个值
a. insert,为缺省方式,插入表中时要求表为空,不然会报错
b. append, 在表中追加新纪录,所以表不为空插入的时候也不会报错
c. replace, 删除旧记录,替换成新装载的记录
d. truncate 同上 (原文中该单词拼写错误)
2.表中属性 content 的问题 -- CLOB 类型插入问题
当使用sqlldr加载很长的字符串(超过4000)到表中的clob类型中时,老是报错: 数据文件的字段超出最大长度.
查找相关资料后得知,sqlldr每次读入文件中数据流的数据类型默认为CHAR,长度为 255 。所以只要超过255字符的段都会报这个错。
解决方法很简单,在控制文件中字段后添加上char(1000000),例如:
LOAD DATA
INFILE *
INTO TABLE DEMO
TRUNCATE
FIELDS TERMINATED BY ','
(d1,
d2 char(1000000)
)
其中表demo的列d2是clob类型,当然1000000只是随便用的一个大数字,只要保证加载的长度不超这个数字就成。
-> sqlldr userid = 用户名 / 密码 @ 数据库名 control = 之前写的ctl控制文件的地址 bad = E:/ bad.bad log = E:/log.log
-> sqlldr userid = everyday/123456@orcl control = E:/data.ctl bad=E:/bad.bad log = E:/ log.log
https://www.cnblogs.com/xwb583312435/p/9039931.html
https://blog.csdn.net/demonson/article/details/79712207
https://blog.csdn.net/dingguanyi/article/details/82259685