关于用sqlldr导入日期的问题

chencl2bj 2011-01-30 10:27:40
我今天利用sqlldr进行数据输入在输入一个date类型的数据时发生错误,诚心求解错误原因和解决方法
我的控制文件是
LOAD DATA
INFILE 'emp.dat'
replace
INTO TABLE emp when empno != ''
(Empno position(1:4) integer external,
ename position(9:13) char,
Hiredate position(18:28) Date,
Job position(33:41) char,
Mgrno position(49:52) integer external,
Salary position(57:65) decimal external,
comm position(73:75) decimal external,
Deptno position(81:82) integer external)
数据为
1000 smith 01-Jan-1977 clerk 2000 12345.67 200 10
1010 jones 02-Jan-1977 mgr 2000 212345.67 200 10
1020 manus 01-Jan-1988 test 2000 12345.67 200 10
1030 tanus 01-Jan-1997 math 1080 12345.67 200 20
1040 smath 01-Jan-2007 clerk 1080 12345.67 200 20
1050 sith 01-Jan-2008 clerk 2000 12345.67 200 10
1060 fith 01-Jan-1990 clerk 2000 12345.67 200 30
1070 lith 12-Jan-1991 spvsr 2000 12345.67 200 30
1080 rith 01-Jan-2001 clerk 2000 12345.67 200 30
2000 keith 01-Jan-1977 clerk 3000 12345.67 200 20
3000 tony 01-Jan-1977 president 12345.67 200 10

结果发生了错误 错误的log文件是
SQL*Loader: Release 11.1.0.6.0 - Production on Sat Jan 29 21:27:23 2011

Copyright (c) 1982, 2007, Oracle. All rights reserved.

Control File: emp.ctl
Data File: emp.dat
Bad File: emp.bad
Discard File: none specified

(Allow all discards)

Number to load: ALL
Number to skip: 0
Errors allowed: 50
Bind array: 64 rows, maximum of 256000 bytes
Continuation: none specified
Path used: Conventional

Table EMP, loaded when EMPNO != BLANKS
Insert option in effect for this table: REPLACE

Column Name Position Len Term Encl Datatype
------------------------------ ---------- ----- ---- ---- ---------------------
EMPNO 1:4 4 CHARACTER
ENAME 9:13 5 CHARACTER
HIREDATE 18:28 11 DATE DD-MON-RR
JOB 33:41 9 CHARACTER
MGRNO 49:52 4 CHARACTER
SALARY 57:65 9 CHARACTER
COMM 73:75 3 CHARACTER
DEPTNO 81:82 2 CHARACTER

Record 1: Rejected - Error on table EMP, column HIREDATE.
ORA-01858: a non-numeric character was found where a numeric was expected

Record 2: Rejected - Error on table EMP, column HIREDATE.
ORA-01858: a non-numeric character was found where a numeric was expected

Record 3: Rejected - Error on table EMP, column HIREDATE.
ORA-01858: a non-numeric character was found where a numeric was expected

Record 4: Rejected - Error on table EMP, column HIREDATE.
ORA-01858: a non-numeric character was found where a numeric was expected

Record 5: Rejected - Error on table EMP, column HIREDATE.
ORA-01858: a non-numeric character was found where a numeric was expected

Record 6: Rejected - Error on table EMP, column HIREDATE.
ORA-01847: day of month must be between 1 and last day of month

Record 7: Rejected - Error on table EMP, column HIREDATE.
ORA-01847: day of month must be between 1 and last day of month

Record 8: Rejected - Error on table EMP, column HIREDATE.
ORA-01847: day of month must be between 1 and last day of month

Record 9: Rejected - Error on table EMP, column HIREDATE.
ORA-01847: day of month must be between 1 and last day of month

Record 10: Rejected - Error on table EMP, column HIREDATE.
ORA-01858: a non-numeric character was found where a numeric was expected

Record 11: Rejected - Error on table EMP, column HIREDATE.
ORA-01847: day of month must be between 1 and last day of month


Table EMP:
0 Rows successfully loaded.
11 Rows not loaded due to data errors.
0 Rows not loaded because all WHEN clauses were failed.
0 Rows not loaded because all fields were null.


Space allocated for bind array: 4352 bytes(64 rows)
Read buffer bytes: 1048576

Total logical records skipped: 0
Total logical records read: 11
Total logical records rejected: 11
Total logical records discarded: 0

Run began on Sat Jan 29 21:27:23 2011
Run ended on Sat Jan 29 21:27:23 2011

Elapsed time was: 00:00:00.14



...全文
595 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
chencl2bj 2011-02-04
  • 打赏
  • 举报
回复
谢谢各位的回答 我把分给最先回答的人了
飃颻 2011-02-01
  • 打赏
  • 举报
回复
日期是個毫秒級的整數,Hiredate沒有CHAR格式怎麼能讓系統接受呢?
甲骨文對你的專業知識要求遠遠超過微軟。
ACMAIN_CHM 2011-02-01
  • 打赏
  • 举报
回复
Hiredate position(18:28) "TO_DATE(:Hiredate,'DD-MMM-YYYY')",
Oraclefans_ 2011-01-30
  • 打赏
  • 举报
回复
HIREDATE"to_date(SUBSTR(:HIREDATE,18,28),'yyyy-mm-dd')" 这样修改下。..
xman_78tom 2011-01-30
  • 打赏
  • 举报
回复
或改为 Hiredate position(18:28) Date "DD-Mon-YYYY"
xman_78tom 2011-01-30
  • 打赏
  • 举报
回复
设置一个环境变量 NLS_DATE_FORMAT=DD-MON-YYYY

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧