在TERMINATED和ENCLOSED字段之后找不到终结符 - 日期

时间:2014-07-09 07:12:13

标签: oracle sql-loader

我有以下数据:

G_ID;"KID";"MG_DATE";"SQTY"
5697877;"1301633";"06/04/2012";"1"
5844541;"1301633";"03/04/2012";"1"
5826002;"1301633";"03/04/2012";"1"

当我尝试使用SQL * Loader加载它时,我收到以下错误:

  

记录1:已拒绝 - 表格“X”上出现错误。“销售”,第SALE_DATE栏   在TERMINATED和ENCLOSED字段后找不到终结符

CTL档案:

OPTIONS ( SKIP=1)
LOAD DATA
INFILE ...
BADFILE ...
DISCARDFILE ...
INTO TABLE "X"."SALES"
FIELDS TERMINATED BY ';' optionally enclosed by '"' TRAILING NULLCOLS
(ITEM_CODE integer,
LOC_CODE integer,
SALE_DATE date "dd/mm/yyyy",
QUANTITY integer)

请帮我理解什么是错的,数据很简单,看起来没有特殊的字符。

1 个答案:

答案 0 :(得分:1)

我略微修改了控制文件并成功加载。

OPTIONS (SKIP=1)
LOAD DATA
INFILE 'sales.dat'
INTO TABLE "X"."SALES"
FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '"' TRAILING NULLCOLS
(
ITEM_CODE,
LOC_CODE,
SALE_DATE date "dd/mm/yyyy",
QUANTITY)

我认为您不需要在控制文件中指定数据类型integer,因为表的列类型为number,它会自动将数据转换为数字。

当您指定数据类型integer时,似乎sqlldr将数据文件中的列长度视为4,这会导致错误。

如果您想指定数据类型,请仅使用integer external代替integer,如下所示:

...
ITEM_CODE integer external,
LOC_CODE integer external,
SALE_DATE date "dd/mm/yyyy",
QUANTITY integer external)