使用sqlldr命令向Oracle导入数据
前两天,碰到了一个需求,需要把“.txt”的数据导入到Oracle数据库中,现在记录一下:
1.查看需要导入的文件
要导入的文件是:lcb_rccr.txt
里面内容如下:
000000000146@!20110710@!000050000036@!00005@!20110710@!010001@!06362038@!20000.00@!江阴市XXXXX材料有限公司@!514458198875@!104302200135@!3022402016-10110017876@!江阴市江顺模具有限公司@!20110706@!20110711@!000130000026@!20110711@!1@!@!2@!4
字段和字段之间是使用“@!”来进行分隔的
2.在要导入的数据库中依照这个表的表结构,创建好表
create table lcb_rccr(
collsq varchar2(20) NOT NULL ,
inptdt char(8) NOT NULL ,
inptsq varchar2(20) NOT NULL ,
inptus varchar2(6) NOT NULL ,
inpttm date NOT NULL ,
brchno varchar2(10) NOT NULL ,
acptno varchar2(40) NOT NULL ,
acptam number(18,2) NOT NULL ,
drawna varchar2(80) NULL ,
drawac varchar2(40) NULL ,
drawbn varchar2(80) NULL ,
pyerac varchar2(40) NULL ,
pyerna varchar2(80) NULL ,
matudt char(8) NULL ,
procdt char(8) NULL ,
procsq varchar2(20) NULL ,
proctm date NULL ,
proctp char(1) NOT NULL ,
dshntx varchar2(160) NULL ,
collst char(1) NOT NULL ,
backnm int NULL
) ;
3.编写".ctl"文件
文件lcb_rccr.ctl的内容如下:
OPTIONS(DIRECT=TRUE,ROWS=5000)
LOAD DATA
CHARACTERSET ZHS16GBK
TRUNCATE INTO TABLE lcb_rccr
REENABLE DISABLED_CONSTRAINTS
FIELDS TERMINATED BY '@!'
TRAILING NULLCOLS
(
collsq,
inptdt,
inptsq,
inptus,
inpttm "to_date(:inpttm,'yyyymmdd')", 注:把文本格式的日期转换成Date类型
brchno,
acptno,
acptam,
drawna,
drawac,
drawbn,
pyerac,
pyerna,
matudt,
procdt,
procsq,
proctm "to_date(:proctm,'yyyymmdd')",
proctp,
dshntx,
collst,
backnm
)
4.编写dos命令,并执行
dos命令如下:sqlldr impdata/123123@jydbdev_194.168.12.70 control=D:/aa/lcb_rccr.ctl errors=1000 rows=1000 data=D:/aa/lcb_rccr.txt log=D:/aa/lcb_rccr_log.txt bad=D:/aa/lcb_rccr_err.txt
impldata/123123是数据库的登录名和密码
control = 后面是".ctl"文件的位置
data = 后面是数据文件的位置(lcb_rccr.txt文件的位置)
log = 后面是日志的位置(这个很重要,第一次导入的时候,因为日期格式问题,发生了错误,就是看日志文件找出Bug的)
导入成功。