Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

ORA-01401:valor inserido muito grande para a coluna CHAR


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.