2015-06-03 13 views
5

Beim Versuch, eine UTF-8-Datei mit ¥ Trennzeichen zu laden, trennt es nicht die Felder, wenn es das Zeichen findet. Wir erhalten einen ORA-12899-Fehler von dem Wert, der die Spaltengröße überschreitet, da versucht wird, die gesamte Zeile in die erste Spalte zu setzen.SQL * Loader erkennt Begrenzer "¥"

In UTF-8, ¥ ist  ¥ (C2A5), aber es scheint, dass es C2C2A5 zu finden versucht.

Die Datenbankeinstellungen sind

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 

Wir haben versucht mit:

NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1 
NLS_LANG=SPANISH_SPAIN.WE8MSWIN1252 

Wir SQL * Loader aus einem Fenster Befehl ausgeführt werden, auf Windows 7 Maschine mit spanischen locale.

Steuerdatei:

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

Beispieldatendatei:

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

Als Ausgangspunkt, in der Annahme, es ist irgendwo auf der ganzen Linie verwirrt, was sind Ihre Datenbank-Zeichensatz, NLS_LANG Einstellung und OS-Zeichensatz? Können Sie eine Beispielsteuerdatei und Dummydaten hinzufügen, die das Problem veranschaulichen? Oder wenn die Datei auf dem Server abgelegt werden kann, können Sie sehen, ob sie mit einer externen Tabelle anstelle von SQL \ * Loader akzeptiert wird? –

+0

Fügen Sie diese Information zu der Frage hinzu, da eine Bearbeitung formatiert werden kann, um lesbar zu sein, nicht als Kommentar. Sie benötigen auch das Betriebssystem charaterset und Ihre Umgebungsvariable NLS_LANG. (Oder die nls_session_parameters von SQL \ * Plus laufen auf demselben Konto, auf dem Sie SQL \ * Loader ausführen, aber NLS_LANG ist kürzer) –

+0

Vielen Dank @AlexPoole, ich habe die Frage aktualisiert – luis

Antwort

1

Da Sie ein UTF8-Zeichen und ein UTF8-Dateiformat verwenden (glaube ich), für die Sitzung, die SQL läuft * Loader setzen Sie Ihre Umgebungsvariable NLS_LANG auf "SPANISH_SPAIN.UTF8".