Oracle
 sql >> Datenbank >  >> RDS >> Oracle

ORA-01401:Eingefügter Wert zu groß für Spalte CHAR

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.