Ihre Datendatei enthält zusätzliche, unsichtbare Zeichen. Wir können das Original nicht sehen, aber vermutlich wurde es in Windows erstellt und hat CRLF neue Zeilentrenner; und Sie führen SQL*Loader in einer UNIX/Linux-Umgebung aus, die nur einen Zeilenvorschub (LF) erwartet. Die Wagenrücklaufzeichen (CR) sind immer noch in der Datei und Oracle sieht sie als Teil des ZIP-Felds in der Datei.
Die letzte Zeile hat kein CRLF (oder eine Zeilenumbruchmarkierung), also in dieser Zeile - und nur diese Zeile - das PLZ-Feld wird als 5 Zeichen gesehen, für alle anderen wird es als sechs Zeichen gesehen, z. 98001^M
.
Weitere Informationen zum Standardverhalten finden Sie in der Dokumentation :
Wenn Sie die Datendatei in einer Bearbeitung wie vi oder vim öffnen, sehen Sie diese zusätzlichen ^M
Steuerzeichen.
Es gibt mehrere Möglichkeiten, dies zu beheben. Sie können die Datei ändern; Am einfachsten ist es, die Daten zu kopieren und in eine neue Datei einzufügen, die in der Umgebung erstellt wurde, in der Sie SQL*Loader ausführen werden. Es gibt Dienstprogramme zum Konvertieren von Zeilenenden, wenn Sie dies bevorzugen, z. dos2unix
. Oder Ihr Windows-Editor kann die Datei möglicherweise ohne die CRs speichern. Sie könnten der Datendatei auch ein zusätzliches Feldtrennzeichen hinzufügen, wie Ditto vorgeschlagen hat.
Oder Sie können SQL*Loader mitteilen, CRLF zu erwarten, indem Sie INFILE
ändern Zeile:
LOAD DATA
INFILE Customer.dat "str '\r\n'"
INTO TABLE Customer
...
... das führt dann aber zu Problemen, wenn Sie eine unter Linux erstellte Datei ohne die CR-Zeichen liefern.