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.