Проблема использования sqlldr.exe со значениями NCLOB, когда используются символы Юникода, не входящие в диапазон кода ASCII - PullRequest
0 голосов
/ 13 сентября 2010

Когда мы используем sqlldr для заполнения столбца NCLOB текстовым значением из файла lob, а символ не входит в обычный диапазон кодов ASCII бомб sqlldr.


На первый взгляд соответствующие разделы из файла журнала:

EXTENSIONDATA                     DERIVED *****           VARCHARC             
    Maximum field length is -2147483639
    Static LOBFILE.  Filename is C:\Temp\fb6b023e-7bac-4c93-814a-c7adecc11ad5.lob
    Character Set UTF8 specified for all input.

SQL*Loader-462: error inserting LOB into column EXTENSIONDATA, row 106, table ENTITYEXTENSIONDATA
secondary data file for LOB is C:\Temp\fb6b023e-7bac-4c93-814a-c7adecc11ad5.lob
file offset for beginning of lob is 18393
SQL*Loader-645: error converting character length field to a number

Файл управления имеет

LOAD DATA
CHARACTERSET UTF8
INFILE "C:\Temp\eb5e656c-94d1-4a0e-99be-3df8fa0d4461.bcp"
BADFILE "C:\Temp\eb5e656c-94d1-4a0e-99be-3df8fa0d4461.bad"
APPEND
INTO TABLE EntityExtensionData REENABLE
FIELDS TERMINATED BY '||' 
TRAILING NULLCOLS
(EntityExtensionDataId,EntityId,ExtensionData LOBFILE(CONSTANT 'C:\Temp\eb5e656c-94d1-4a0e-99be-3df8fa0d4461.lob') VARCHARC(10,2147483647))

1 Ответ

1 голос
/ 13 сентября 2010

Когда я определял длину значения в значении lob, чтобы поместить его в запись файла lob, я использовал string.Length. Очевидно, что когда это был многобайтовый символ, это был бы неправильный размер в байтах. Исправление было просто изменить его, чтобы использовать Encoding.UTF8.GetByteCount (), чтобы получить правильный размер.

...