我有以下数据:
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)
请帮我理解什么是错的,数据很简单,看起来没有特殊的字符。
答案 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)