1

sqlldr を使用して、LOB ファイルからのテキスト値を NCLOB 列に入力し、文字が通常の ASCII コード範囲にない場合、sqlldr 爆弾が発生します。


ログファイルから一見関連するセクション:

拡張データ派生 ***** VARCHARC             
    最大フィールド長は -2147483639 です
    静的 LOBFILE。ファイル名は C:\Temp\fb6b023e-7bac-4c93-814a-c7adecc11ad5.lob です。
    すべての入力に文字セット UTF8 を指定。

SQL*Loader-462: LOBを列EXTENSIONDATA、行106、表ENTITYEXTENSIONDATAに挿入中にエラーが発生しました
LOB のセカンダリ データ ファイルは C:\Temp\fb6b023e-7bac-4c93-814a-c7adecc11ad5.lob です。
LOB の先頭のファイル オフセットは 18393 です
SQL*Loader-645: 文字長フィールドを数値に変換中にエラーが発生しました

制御ファイルには

データを読み込む
文字セット UTF8
INFILE "C:\Temp\eb5e656c-94d1-4a0e-99be-3df8fa0d4461.bcp"
BADFILE "C:\Temp\eb5e656c-94d1-4a0e-99be-3df8fa0d4461.bad"
追記
INTO TABLE EntityExtensionData REENABLE
「||」で終了するフィールド
末尾のヌルコル
(EntityExtensionDataId,EntityId,ExtensionData LOBFILE(CONSTANT 'C:\Temp\eb5e656c-94d1-4a0e-99be-3df8fa0d4461.lob') VARCHARC(10,2147483647))
4

1 に答える 1

1

lob ファイルのレコードに配置する lob 値の値の長さを決定していたとき、私は string.Length を使用していました。明らかにマルチバイト文字の場合、これは間違ったサイズのバイトになります。修正は、Encoding.UTF8.GetByteCount() を使用して正しいサイズを取得するように変更するだけでした。

于 2010-09-13T15:40:18.150 に答える