SQL加载错误:“可变长度字段超过最大长度。”(SQL Loader Error: “Variabl

2019-06-24 01:39发布

我有一个SQL Loader控制文件,

LOAD DATA  
INFILE 'test.txt'  
INTO TABLE TEST replace  
fields terminated "|" optionally enclosed by '"' TRAILING NULLCOLS  
( DOCUMENTID INTEGER(10),  
  CUSTID INTEGER(10),  
  USERID INTEGER(10),  
  FILENAME VARCHAR(255),  
  LABEL VARCHAR(50),  
  DESCRIPTION VARCHAR(2000),  
  POSTDATE DATE "YYYY-MM-DD HH24:MI:SS" NULLIF POSTDATE="",  
  USERFILENAME VARCHAR(50),  
  STORAGEPATH VARCHAR(255)
)

和它给我一个错误,当我在其上运行SQL装载机,
Record 1: Rejected - Error on table TEST, column FILENAME. Variable length field exceeds maximum length.

下面是该行..该列的长度为255个正在进行中..

1|5001572|2|/Storage/Test/5001572/test.pdf|test.pdf||2005-01-13 11:47:49||

这里是我的日志文件中注意到一个奇特

Column Name | Position | Len | Term | Encl | Datatype
FILENAME | NEXT | 257 | | | VARCHAR

我定义的长度为我的两个表和控制文件255。 然而,日志吐出它作为257? 我试图撞倒在控制文件253的长度,因此它显示为255的日志文件,但同样的问题。

任何帮助吗? 现在,这已经窃听我两天。

谢谢。

Answer 1:

不要定义你的数据字段为VARCHAR2和INTEGER。 使用CHAR。 在大多数情况下,从文本文件加载数据时,要使用CHAR,或者是日期,但即使是从一个文本形式转换。 大多数时候,你甚至不需要一个长度说明。 为CHAR字段的默认长度是255你的控制文件应该是这个样子:

LOAD DATA
INFILE 'test.txt'
INTO TABLE TEST replace
fields terminated "|" optionally enclosed by '"' TRAILING NULLCOLS
(DOCUMENTID,
CUSTID,
USERID ,
FILENAME,
LABEL,
DESCRIPTION CHAR(2000),
POSTDATE DATE "YYYY-MM-DD HH24:MI:SS" NULLIF POSTDATE="",
USERFILENAME,
STORAGEPATH)


Answer 2:

+1 DCookie,而是要扩大它的数据类型之间的区别是很重要的,如在SQL * Loader控制文件中的表和数据类型指定为他们的意思,而不同的东西,容易混淆。

首先得有个看的文件 ,并注意定期加载文本文件,当你需要使用的“便携式”的数据类型是。

VARCHAR是一个“非便携式”型的,其中:

...由一个二进制长度子字段,随后的指定长度的字符串的

因此,作为DCookie说,CHAR是去的东西,INTEGER外部是一个很常用的SQL * Loader的数据,你可能要指定DOCUMENTID等类型



文章来源: SQL Loader Error: “Variable length field exceeds maximum length.”