2015-06-03 40 views
5

Podczas próby załadowania pliku UTF-8 z separatorem ¥, nie oddziela pól po znalezieniu znaku. Otrzymujemy błąd ORA-12899 od wartości przekraczającej rozmiar kolumny, ponieważ próbuje umieścić całą linię w pierwszej kolumnie.SQL * Program ładujący nie rozpoznaje ogranicznika "¥"

w UTF-8, ¥ jest  ¥ (C2A5), ale wydaje się, że próbuje znaleźć C2C2A5.

Ustawienia bazy danych są

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 

Próbowaliśmy z:

NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1 
NLS_LANG=SPANISH_SPAIN.WE8MSWIN1252 

Biegniemy SQL * Loader z okna poleceń w systemie Windows 7 maszynie z hiszpańskim lokalizacji.

plik Sterowanie:

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)))" 
) 

plik danych próbki:

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

Jako punkt wyjścia, przy założeniu, że jest niejasno gdzieś w dole, jaki jest zestaw znaków bazy danych, ustawienie NLS_LANG i zestaw znaków systemu operacyjnego? Czy możesz dodać przykładowy plik kontrolny i fałszywe dane, które demonstrują problem? Lub jeśli plik można umieścić na serwerze, czy widzisz, czy jest on akceptowany za pomocą zewnętrznej tabeli zamiast SQL \ * Loader? –

+0

Proszę dodać te informacje do pytania, ponieważ można je sformatować w formacie czytelnym, a nie jako komentarz. Potrzebny jest także zestaw znaków systemu operacyjnego i zmienna środowiskowa NLS_LANG. (Lub nls_session_parameters z SQL \ * Plus działa na tym samym koncie, na którym korzystasz z SQL \ * Loader od, ale NLS_LANG jest krótszy) –

+0

Dziękuję @AlexPoole, zaktualizowałem pytanie – luis

Odpowiedz

1

Ponieważ używasz znaku UTF-8 i UTF-8 format pliku (myślę), na sesji, która działa SQL * Program ładujący ustawi zmienną środowiskową NLS_LANG na "SPANISH_SPAIN.UTF8".