Seu arquivo de dados tem caracteres extras invisíveis. Não podemos ver o original, mas presumivelmente foi criado no Windows e tem CRLF novos separadores de linha; e você está executando o SQL*Loader em um ambiente UNIX/Linux que espera apenas alimentação de linha (LF). Os caracteres de retorno de carro (CR) ainda estão no arquivo e o Oracle os está vendo como parte do campo ZIP no arquivo.
A última linha não tem um CRLF (ou qualquer marcador de nova linha), então nessa linha - e somente nessa linha - o campo ZIP está sendo visto como 5 caracteres, para todos os outros está sendo visto como seis, por exemplo
98001^M
. Você pode ler mais sobre o comportamento padrão na documentação :
Se você abrir o arquivo de dados em uma edição como vi ou vim, verá aqueles
^M
extras caracteres de controle. Existem várias maneiras de corrigir isso. Você pode modificar o arquivo; a coisa mais simples a fazer é copiar e colar os dados em um novo arquivo criado no ambiente em que você executará o SQL*Loader. Existem utilitários para converter finais de linha, se preferir, por exemplo.
dos2unix
. Ou seu editor do Windows pode salvar o arquivo sem os CRs. Você também pode adicionar um delimitador de campo extra ao arquivo de dados, como sugerido por Ditto. Ou você pode dizer ao SQL*Loader para esperar CRLF alterando o
INFILE
linha:LOAD DATA
INFILE Customer.dat "str '\r\n'"
INTO TABLE Customer
...
... embora isso cause problemas se você fornecer um arquivo criado no Linux, sem os caracteres CR.