sql >> Databasteknik >  >> RDS >> Oracle

ORA-01401:infogat värde för stort för kolumn CHAR

Din datafil har extra, osynliga tecken. Vi kan inte se originalet men förmodligen skapades det i Windows och har CRLF nya radavgränsare; och du kör SQL*Loader i en UNIX/Linux-miljö som bara förväntar sig linjematning (LF). Carriage Return (CR)-tecknen finns fortfarande i filen, och Oracle ser dem som en del av ZIP-fältet i filen.

Den sista raden har ingen CRLF (eller någon nyradsmarkör), så på den raden - och endast den raden - ZIP-fältet ses som 5 tecken, för alla andra ses det som sex, t.ex. 98001^M .

Du kan läsa mer om standardbeteendet i dokumentationen :

Om du öppnar datafilen i en redigering som vi eller vim, kommer du att se de extra ^M kontrolltecken.

Det finns flera sätt att fixa detta. Du kan ändra filen; det enklaste att göra är att kopiera och klistra in data i en ny fil skapad i miljön du ska köra SQL*Loader i. Det finns verktyg för att konvertera radändelser om du föredrar det, t.ex. dos2unix . Eller så kanske din Windows-redigerare kan spara filen utan CR. Du kan också lägga till en extra fältavgränsare till datafilen, som Ditto föreslog.

Eller så kan du säga åt SQL*Loader att förvänta sig CRLF genom att ändra INFILE rad:

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

... men det kommer då att orsaka problem om du tillhandahåller en fil skapad i Linux, utan CR-tecken.



  1. Extrahera URL:en från img src med en mysql-fråga

  2. På begäran paginering (Sida poster på begäran av användare)

  3. Det går inte att välja enhet genom identifieringsvariabler i arkivet

  4. Primärt nyckelvärde ökar inte korrekt