sql >> Database >  >> RDS >> Oracle

ORA-01401:ingevoegde waarde te groot voor kolom CHAR

Uw gegevensbestand heeft extra, onzichtbare tekens. We kunnen het origineel niet zien, maar vermoedelijk is het gemaakt in Windows en heeft het CRLF nieuwe regelscheidingstekens; en je draait SQL*Loader in een UNIX/Linux-omgeving die alleen line feed (LF) verwacht. De CR-tekens (Care Return) bevinden zich nog steeds in het bestand en Oracle ziet ze als onderdeel van het ZIP-veld in het bestand.

De laatste regel heeft geen CRLF (of een nieuwe-regelmarkering), dus op die regel - en alleen die regel - het ZIP-veld wordt gezien als 5 tekens, voor alle anderen wordt het gezien als zes, b.v. 98001^M .

U kunt meer lezen over het standaardgedrag in de documentatie :

Als je het gegevensbestand opent in een bewerking zoals vi of vim, zie je die extra ^M controle karakters.

Er zijn verschillende manieren om dit op te lossen. U kunt het bestand wijzigen; het eenvoudigste is om de gegevens te kopiëren en te plakken in een nieuw bestand dat is gemaakt in de omgeving waarin u SQL*Loader gaat uitvoeren. Er zijn hulpprogramma's om regeleindes te converteren als u dat wilt, b.v. dos2unix . Of uw Windows-editor kan het bestand mogelijk opslaan zonder de CR's. Je zou ook een extra veldscheidingsteken aan het gegevensbestand kunnen toevoegen, zoals Ditto suggereerde.

Of u kunt SQL*Loader laten weten dat het CRLF verwacht door de INFILE . te wijzigen regel:

LOAD DATA
INFILE Customer.dat "str '\r\n'"
INTO TABLE Customer
...

... hoewel dat dan problemen zal opleveren als je een bestand aanlevert dat in Linux is gemaakt, zonder de CR-tekens.



  1. MYSQL - SELECT IP v4/v6, inet_pton &bin2hex

  2. Hoe herstel ik vanuit een drop-databaseopdracht met behulp van een mysql binair logboek?

  3. SQL niet leeg in plaats van niet NULL

  4. MySQL blijft crashen