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.