sql >> Database teknologi >  >> RDS >> Oracle

ORA-01401:indsat værdi for stor til kolonne CHAR

Din datafil har ekstra, usynlige tegn. Vi kan ikke se originalen, men formodentlig er den oprettet i Windows og har CRLF nye linjeseparatorer; og du kører SQL*Loader i et UNIX/Linux-miljø, der kun forventer linjefeed (LF). Carriage Return-tegnene (CR) er stadig i filen, og Oracle ser dem som en del af ZIP-feltet i filen.

Den sidste linje har ikke en CRLF (eller en ny linjemarkør), så på den linje - og kun den linje - ZIP-feltet ses som 5 tegn, For alle de andre ses det som seks, f.eks. 98001^M .

Du kan læse mere om standardadfærden i dokumentationen :

Hvis du åbner datafilen i en redigering som vi eller vim, vil du se de ekstra ^M kontroltegn.

Der er flere måder at løse dette på. Du kan ændre filen; den enkleste ting at gøre, er at kopiere og indsætte dataene i en ny fil, der er oprettet i det miljø, du skal køre SQL*Loader i. Der er hjælpeprogrammer til at konvertere linjeafslutninger, hvis du foretrækker det, f.eks. dos2unix . Eller din Windows-editor kan muligvis gemme filen uden CR'erne. Du kan også tilføje en ekstra feltafgrænser til datafilen, som Ditto foreslog.

Eller du kan bede SQL*Loader om at forvente CRLF ved at ændre INFILE linje:

LOAD DATA
INFILE Customer.dat "str '\r\n'"
INTO TABLE Customer
...

... selvom det så vil give problemer, hvis du leverer en fil oprettet i Linux, uden CR-tegnene.



  1. Hvordan søger man data i alle tabeller i databasen ved hjælp af select query i vb.net?

  2. Sonar opsætning med MySql

  3. INT(3)-kolonnen klipper ikke værdien til passende længde og tillader, at den fulde værdi kan indsættes - MySQL

  4. Hvordan slipper jeg en kolonne med objektafhængigheder i SQL Server 2008?