【发布时间】:2017-01-06 15:19:09
【问题描述】:
我正在尝试使用 sql*loader 导入一些数据,但我无法导入纬度/经度。在表上这些列是 FLOAT(126) 而在数据文件上只是文本。我尝试在 sqlldr 控制文件上使用 FLOAT EXTERNAL,但它不起作用。我得到了 ORA-01722: 无效号码。
Describe my_table;
Name Null Type
------------------------- -------- ------------
PRE_ID NOT NULL NUMBER(38)
PRE_DH NOT NULL TIMESTAMP(6)
PRE_PRO NOT NULL NUMBER(38)
PRE_INF NOT NULL NUMBER(38)
PRE_TPL NOT NULL NUMBER(38)
PRE_LAT NOT NULL FLOAT(126)
PRE_LNG NOT NULL FLOAT(126)
数据文件:
55831;08/12/2016 16:48:07;1;-128;2;-22.4741249084473;-50.55194854736336
55831;09/12/2016 08:02:06;1;-128;2;-22.5002975463867;-50.8194427490234
55831;09/12/2016 19:12:06;1;-128;2;-22.5002975463867;-50.8194427490234
和sqlldr控制文件:
load data
infile 'my_file.csv' "str '\r\n'"
append
into table my_table
fields terminated by ';'
trailing nullcols
( PRE_ID CHAR(4000),
PRE_DH TIMESTAMP "DD/MM/YYYY HH24:MI:SS",
PRE_PRO CHAR(4000),
PRE_INF CHAR(4000),
PRE_TPL CHAR(4000),
PRE_LAT FLOAT EXTERNAL,
PRE_LNG FLOAT EXTERNAL,
)
日志文件:
Table MY_TABLE, loaded from every logical record.
Insert option in effect for this table: APPEND
TRAILING NULLCOLS option in effect
Column Name Position Len Term Encl Datatype
------------------------------ ---------- ----- ---- ---- ---------------------
PRE_ID FIRST 4000 ; CHARACTER
PRE_DH NEXT * ; DATETIME DD/MM/YYYY HH24:MI:SS
PRE_PRO NEXT 4000 ; CHARACTER
PRE_INF NEXT 4000 ; CHARACTER
PRE_TPL NEXT 4000 ; CHARACTER
PRE_LAT NEXT * ; CHARACTER
PRE_LNG NEXT * ; CHARACTER
value used for ROWS parameter changed from 64 to 1
Record 1: Rejected - Error on table MY_TABLE, column PRE_LAT.
ORA-01722: invalid number
Record 2: Rejected - Error on table MY_TABLE, column PRE_LAT.
ORA-01722: invalid number
Record 3: Rejected - Error on table MY_TABLE, column PRE_LAT.
ORA-01722: invalid number
【问题讨论】:
-
也许是一个愚蠢的问题(我的问题,如下):为什么不能简单地将 PRE_LAT 和 PRE_LNG 声明为标准 Oracle 数据类型
NUMBER?当然,您不必关心纬度或经度中的小数位数。 -
你的意思是改变表上的数据类型?不能那样做。不是我的表,不是我的数据库。 :-/
-
是的,我就是这个意思。太糟糕了。除此之外我无能为力,我自己没有使用过 sqlldr。祝你好运!
-
您的 NLS_LANG 环境变量设置为什么?
标签: oracle sql-loader