sqlldr能迅速的将大量数据导入数据库中,为dba的工作,提供了很大的便利,它能支持txt、cvs等众多格式,并且支持在导入过程中使用函数,省去了众多数据库的折腾,为此特总结下工作中常用的一些sqlldr用法,希望能为大家sqlldr的学习提供一些帮助。
在这边文章中,我总结了sqlldr导入所支持的txt、csv、tsv格式,如何导入,并且在每一个参数后加入注释:
--------------TXT格式-------------
-----------load.ctl-----------------------
Load DATA
INFILE 'D:\2011年7月无线城市群发1次.TXT'
truncate INTO TABLE test1 --操作类型,用 truncate table 来清除表中原有记录,这里truncate也可以换 成append,两者的区别在于,truncate在导入时会先对表进行truncate操作, append的意思是在原表的数据后添加新数据
Fields terminated by "," -- 数据中每行记录用 "," 分隔,这里的逗号可以根据实际情况,进行替换
Optionally enclosed by '"' -- 数据中每个字段用 '"' 框起,比如字段中有 "," 分隔符时
trailing nullcols --表的字段没有对应的值时允许为空
(
msisdn --列出表中你所需要导入数据的列,
)
----------------------excel、csv格式--------------
当对excel进行导入时,需要先将excel转换成csv格式,
实例如下:
这里我对时间进行了转换,如果不加函数直接导入的话,为字符格式
------------------CSV格式------
Load DATA
INFILE 'D:\test.csv'
truncate INTO TABLE test2
Fields terminated by ',' -- 数据中每行记录用 "," 分隔
(
id ,
ip_addr ,
area ,
access_method,
status ,
begin_time ,
end_time Date "yyyy-mm-dd hh24:mi:ss",------此列为日期型,日期格式为2011-05-04 18:20:30
remark ,
gate_name
)
----------------tsv---------------
Load DATA
--CHARACTERSET UTF8 --在导入过程中如果出现出现乱码状况,可添加此语句,具体的格式,根据情 况而定
INFILE 'D:\users_20111125.tsv'
truncate --操作类型,用 truncate table 来清除表中原有记录
INTO TABLE test3
Fields terminated by X'09' --设置分隔符(X’09’表示制表符:Tab)
trailing nullcols --表的字段没有对应的值时允许为空
(GID,
USERID
)
--------------sql-----------------
sqlldr smzydb/soshare@252 control=D:\load.ctl direct=true
---------------注意事项
1、我们用sqlldr进行导入操作,通常导入数据的表的列都为字符型
例如:
create table test2(id varchar2(30),
ip_aarchar2(30),
area varchar2(30),
access_method varchar2(30),
status varchar2(30),
begin_time varchar2(30),
end_time varchar2(30),
remark varchar2(30),
gate_name varchar2(30));
2、CHARACTERSET UTF8 --在导入过程中如果出现出现乱码状况,可添加此语句,具体的格式,根据 情况而定
3、sqlload 的日期格式导入
如果导入文件时间为“2011-12-11 18:00:00”,如果我们在导入的时候,不加任何函数进行转换,那么入库后是字符型函数,如果想入库后为日期型,就需要加入函数
例如:
Load DATA
INFILE 'D:\sqlload\11月25日_用户注册核对.csv'
truncate INTO TABLE tab_register
Fields terminated by ','
(regnum,
regdate Date "yyyy-mm-dd hh24:mi:ss",
source)