2015-06-03 12 views
5

Quando si tenta di caricare un file UTF-8 con il separatore ¥, non separa i campi quando trova il carattere. Otteniamo un errore ORA-12899 dal valore che supera la dimensione della colonna, poiché tenta di inserire l'intera riga nella prima colonna.SQL * Il caricatore non riconosce il delimitatore "¥"

in UTF-8, ¥ è Â ¥ (C2A5), ma sembra che si sta cercando di trovare C2C2A5.

Le impostazioni del database sono

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 

Abbiamo provato con:

NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1 
NLS_LANG=SPANISH_SPAIN.WE8MSWIN1252 

Ci sono in esecuzione SQL * Loader da una finestra di comando su Windows 7 macchina con locale spagnolo.

File di controllo:

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

file di dati di esempio:

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

Come punto di partenza, supponendo che sia confuso da qualche parte lungo la linea, quali sono il set di caratteri del database, l'impostazione NLS_LANG e il set di caratteri del sistema operativo? È possibile aggiungere un file di controllo di esempio e dati fittizi che dimostrino il problema? O se il file può essere messo sul server, puoi vedere se è accettato usando una tabella esterna invece di SQL \ * Loader? –

+0

Si prega di aggiungere tali informazioni alla domanda in quanto una modifica può essere formattata per essere leggibile, non come un commento. È necessario anche il charatteret del sistema operativo e la variabile di ambiente NLS_LANG. (Oppure i nls_session_parameters di SQL \ * Plus in esecuzione sullo stesso account su cui stai caricando SQL \ * Loader, ma NLS_LANG è più breve) –

+0

Grazie @AlexPoole, ho aggiornato la domanda – luis

risposta

1

Dal momento che si sta utilizzando un carattere UTF8 e un formato di file UTF8 (credo), per la sessione che esegue SQL * Il programma di caricamento imposta la variabile di ambiente NLS_LANG su "SPANISH_SPAIN.UTF8".

Problemi correlati