Twój plik danych zawiera dodatkowe, niewidoczne znaki. Nie widzimy oryginału, ale prawdopodobnie został on utworzony w systemie Windows i ma CRLF nowe separatory wierszy; i używasz SQL*Loader w środowisku UNIX/Linux, które oczekuje tylko wysuwu wiersza (LF). Znaki powrotu karetki (CR) nadal znajdują się w pliku, a Oracle widzi je jako część pola ZIP w pliku.
Ostatnia linia nie ma CRLF (ani żadnego znacznika nowej linii), więc w tej linii - i tylko ta linia - pole ZIP jest widziane jako 5 znaków, dla wszystkich innych jest widziane jako sześć, np. 98001^M
.
Więcej informacji na temat domyślnego zachowania można znaleźć w dokumentacji :
Jeśli otworzysz plik danych w edycji, takiej jak vi lub vim, zobaczysz te dodatkowe ^M
znaki kontrolne.
Jest kilka sposobów, aby to naprawić. Możesz modyfikować plik; najprostszą rzeczą do zrobienia jest skopiowanie i wklejenie danych do nowego pliku utworzonego w środowisku, w którym będziesz uruchamiać SQL*Loader. Jeśli wolisz, istnieją narzędzia do konwersji końcówek wierszy, np. dos2unix
. Lub twój edytor Windows może być w stanie zapisać plik bez CR. Możesz także dodać dodatkowy ogranicznik pola do pliku danych, jak sugerował Ditto.
Możesz też powiedzieć SQL*Loaderowi, aby oczekiwał CRLF, zmieniając INFILE
linia:
LOAD DATA
INFILE Customer.dat "str '\r\n'"
INTO TABLE Customer
...
... chociaż spowoduje to problemy, jeśli dostarczysz plik utworzony w Linuksie, bez znaków CR.