Sqlldr是Oracle用于文本导入的一个工具,我想使用率应该是很高的。
我就经常需要将一些文本导入到数据库里面,速度还是可以的,只要不是特别的大。其实一般用DataStage做JOB导入,不过用sqlldr只要一命令就搞定了,很方便不是?
要使用sqlldr必须编写control文件,其实很简单,按以下格式编写就行:
LOAD DATA INFILE '%UNL_FILE%' BADFILE '%ERR_FILE%'
Truncate
INTO TABLE Test FIELDS TERMINATED BY "|" TRAILING NULLCOLS
(
DT DATE "YYYY-MM-DD" NULLIF (DT=" "),
PAR_DATE
)
INFILE后面接的是你将要导入的文件,BADFILE是错误文件,TERMINATED BY 指的是你的文本分隔符,我这里是管道符|,Truncate是入库方式,可以是apand以及insert。
INTO TABLE 后面就是接表名了,我这里是Test,表中有二个字段DT以及PAR_DATE分别是DATE型和Char型。
我用sqlldr曾经碰到过一个比较麻烦的问题,就是把空格导入到数据库中DATE类型的字段,常常会报这不是一个合法的格式,或者把空格导入到NUMBER类型的字段中,也会这样报。
我写这文章的很大的一个原因就是,记录一下解决类似的问题的方法,如果是DATE型,可以指定格式,我这里是"YYYY-MM-DD",后面的NULLIF子句是我做了很多试验才试出来的,后面是字段名等于某个值的时候置为NULL,我这里是10个空格。
如果是NUMBER也是一样的,把你想要替换成NULL值的字段加上NULLIF子句就行了。我就是通过这个方法把空格导进去的。
如有问题,欢迎交流!!!QQ:94424751