2012-04-30 20 views
8

私はその列の長さは道..ですここでは、その行だ、SQL Loader制御ファイルを持っているSQLローダーエラー:「可変長フィールドが最大長を超えています。

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 Loaderを実行すると、それは私にエラーを与えている、
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||

そして、ここで私は、ログファイル

0内に気づいた風変わりです

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

私は私のテーブルと制御ファイルの両方に255として長さを定義します。しかし、ログは257としてそれを吐き出しますか?私は253に制御ファイルの長さをノックダウンしようとしたので、ログファイルに255として表示されますが、同じ問題です。

助けが必要ですか?これは今、2日間私を盗んだ。

ありがとうございました。

答えて

13

データフィールドをVARCHAR2およびINTEGERとして定義しないでください。 CHARを使用します。たいていの場合、テキストファイルからデータをロードするときには、CHARまたはDATEを使用することができますが、それでもテキスト形式から変換されます。ほとんどの場合、長さ指定子は必要ありません。 DCookieため

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) 
+1

それはそれでした。 charで長さを指定しても、それは私のためではありませんでしたが、あなたが投稿したものは完全に機能しました。ありがとうございました! – tjsimmons

5

+1が、テーブルやデータの種類に指定されている、それはデータの種類を区別することが重要だということに展開する:CHARフィールドのデフォルトの長さは255制御ファイルのようなものになるはずですSQL *ローダー制御ファイルでは、異なるものを意味するので混乱します。

まず、documentationを見て、通常のテキストファイルを読み込むときは、「ポータブル」データ型を使用する必要があることに注意してください。

varchar型はここで、「非ポータブル」タイプです:

... consists of a binary length subfield followed by a character string of the specified length

DCookieが言うように、CHARはのために行くもので、INTEGER EXTERNALは非常に一般的に使用されるSQL * Loaderのデータ型ですDOCUMENTIDなどに指定したいと思うでしょう。

+1

ありがとう!私もそれを念頭に置いておきます。私は彼らが2つの別個のものであることを知らなかった - 私は彼らが数学をするべきだと思った。バイナリ長サブフィールド+指定長は、255が257になった理由も説明します。 – tjsimmons

+1

+1、ここDavidに同意してください。 SQL Loaderコントロールのファイルタイプの仕様と、テーブル自体の仕様との違いは、常に人々を混乱させるようです。私は制御ファイルでCHARとDATE以外のものを使用したことはないと思います。 – DCookie

+0

ところで、コントロールファイルとテーブル自体にこれらの異なるタイプがある理由は分かりますか? – ady

関連する問題