sqlldr导入数据ORA-01722:invalid number及日期型字段导入

Sqlldr.ctl控制文件如下

options(errors=999,rows=99,silent=(feedback,discards))

load data

 

infile 'sqlldr.dat' "str '\r\n'"

append

into table  scott.emp

fields terminated by ','

trailing nullcols

 

(EMPNO INTEGER EXTERNAL,

ENAME,

JOB,

MGR INTEGER EXTERNAL NULLIF (MGR=BLANKS),

HIREDATE DATE 'YYYYMMDD',

SAL DECIMAL EXTERNAL,

COMM DECIMAL EXTERNAL,

DEPTNO INTEGER EXTERNAL

)

 

Sqlldr scott/tiger@instanceid control=sqlldr.ctl

如果ctl文件中不指定导入的数据文件,即不使用infile指定文件,可使用下列命令

Sqlldr scott/tiger@instanceid control=sqlldr.ctl  data=sqlldr.dat.

 

利用sqlloader导入会出现ORA-01722:invalid number问题;

原因:由于数据文件是在Windows中编辑的,存在换行符,如果integer或者number类型的字段位位于表的最后,最后会有CR/LF的换行符,在使用sqlldr导入的时候换行符也包含在最后一个字段中,使得对应的导入的值与数据库中定义的数据类型不匹配,就会报ORA-01722:invalid number错误。解决方法是在最后一个字段后加TERMINATED BY WHITESPACE,或者在INFILE指点的文件名之后加上 "str '\r\n'"

 

另外,在ctl文件中指定字段类型

CHAR                         字符型

INTEGER EXTERNAL    整型

DECIMAL EXTERNAL    浮点型

DATE 'YYYYMMDD'      日期型

 

你可能感兴趣的:(Oracle)