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' 日期型