1

当我们使用 sqlldr 使用 lob 文件中的文本值填充 NCLOB 列并且该字符不在常规 ASCII 代码范围内时,sqlldr 炸弹。


日志文件中看似相关的部分:

扩展数据派生 ***** VARARC             
    最大字段长度为 -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 重新启用
由“||”终止的字段
尾随 NULLCOLS
(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 回答