Il tuo file di dati ha caratteri extra e invisibili. Non possiamo vedere l'originale ma presumibilmente è stato creato in Windows e ha CRLF nuovi separatori di riga; e stai eseguendo SQL*Loader in un ambiente UNIX/Linux che si aspetta solo line feed (LF). I caratteri di ritorno a capo (CR) sono ancora nel file e Oracle li vede come parte del campo ZIP nel file.
L'ultima riga non ha un CRLF (o qualsiasi indicatore di nuova riga), quindi su quella riga - e solo quella riga - il campo ZIP viene visto come 5 caratteri, Per tutti gli altri viene visto come sei, ad es. 98001^M
.
Puoi leggere ulteriori informazioni sul comportamento predefinito nella documentazione :
Se apri il file di dati in una modifica come vi o vim, vedrai quei ^M
extra caratteri di controllo.
Ci sono diversi modi per risolvere questo problema. Puoi modificare il file; la cosa più semplice da fare è copiare e incollare i dati in un nuovo file creato nell'ambiente in cui eseguirai SQL*Loader. Se preferisci, sono disponibili utilità per convertire le terminazioni di riga, ad es. dos2unix
. Oppure il tuo editor di Windows potrebbe essere in grado di salvare il file senza i CR. Potresti anche aggiungere un delimitatore di campo aggiuntivo al file di dati, come suggerito da Ditto.
Oppure potresti dire a SQL*Loader di aspettarsi CRLF modificando INFILE
riga:
LOAD DATA
INFILE Customer.dat "str '\r\n'"
INTO TABLE Customer
...
... anche se ciò causerà problemi se fornisci un file creato in Linux, senza i caratteri CR.