2015-06-03 2 views
5

При попытке загрузить файл UTF-8 с помощью разделителя ¥ он не разделяет поля при обнаружении символа. Мы получаем ошибку ORA-12899 от значения, превышающего размер столбца, поскольку он пытается поместить всю строку в первый столбец.SQL * Loader не распознает разделитель «¥»

В UTF-8, ¥ является Â ¥ (C2A5), но мне кажется, что он пытается найти C2C2A5.

настройка баз данных

NLS_LANGUAGE SPANISH 
NLS_TERRITORY SPAIN 
NLS_CURRENCY ? 
NLS_ISO_CURRENCY SPAIN 
NLS_NUMERIC_CHARACTERS ,. 
NLS_CHARACTERSET WE8ISO8859P15 
NLS_CALENDAR GREGORIAN 
NLS_DATE_FORMAT DD/MM/RR 
NLS_DATE_LANGUAGE SPANISH 
NLS_SORT SPANISH 
NLS_TIME_FORMAT HH24:MI:SSXFF 
NLS_TIMESTAMP_FORMAT DD/MM/RR HH24:MI:SSXFF 
NLS_TIME_TZ_FORMAT HH24:MI:SSXFF TZR 
NLS_TIMESTAMP_TZ_FORMAT DD/MM/RR HH24:MI:SSXFF TZR 
NLS_DUAL_CURRENCY ? 
NLS_COMP BINARY 
NLS_LENGTH_SEMANTICS BYTE 
NLS_NCHAR_CONV_EXCP FALSE 
NLS_NCHAR_CHARACTERSET AL16UTF16 
NLS_RDBMS_VERSION 11.2.0.3.0 

Мы попытались с:

NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1 
NLS_LANG=SPANISH_SPAIN.WE8MSWIN1252 

Мы работаем SQL * Loader из окна командной строки на Windows 7 машины с испанским языком.

файл управления:

LOAD DATA 
CHARACTERSET UTF8 
INFILE 'C:\tmp\xxxy.txt' 
BADFILE 'C:\tmp\xxxy.bad' 
TRUNCATE INTO TABLE SAMPLE.TEST_CAR_VENCIMI_INTERMED 
fields terminated by "¥" 
TRAILING NULLCOLS 
(
CODE    CHAR "upper(ltrim(rtrim(:CODE)))", 
CIF    CHAR "upper(ltrim(rtrim(:CIF)))", 
CODIGO_PRESTAMO CHAR "upper(ltrim(rtrim(:CODIGO_PRESTAMO)))" 
) 

файл Образец данных:

21AK0100¥P11111111F¥910002¥000000000106013.64¥666666666¥[email protected]¥address¥11111¥Name¥Surname 1¥Surname 2¥[email protected]¥666666666 
+0

В качестве отправной точки, исходя из предположения, что это путают где-то вниз по линии, каковы ваш набор символов базы данных, настройка NLS_LANG и набор символов ОС? Можете ли вы добавить пример файла управления и фиктивные данные, которые демонстрируют проблему? Или, если файл можно поместить на сервер, вы можете увидеть, если он принят с использованием внешней таблицы вместо SQL \ * Loader? –

+0

Пожалуйста, добавьте эту информацию в вопрос, так как отредактировать ее можно отформатировать для чтения, а не как комментарий. Вам также нужна операционная система charaterset и переменная среды NLS_LANG. (Или nls_session_parameters из SQL \ * Plus, работающего в той же учетной записи, с которой вы запускаете SQL \ * Loader, но NLS_LANG короче) –

+0

Спасибо @AlexPoole, я обновил вопрос – luis

ответ

1

Поскольку вы используете символ UTF8 и формат UTF8 файла (я думаю), для сессии, которая работает SQL * Загрузитель задает переменную среды NLS_LANG для «SPANISH_SPAIN.UTF8».