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.