Oracle
 sql >> Baza danych >  >> RDS >> Oracle

ORA-01401:wstawiona wartość jest za duża dla kolumny CHAR

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak skrócić pole varchar2 w Oracle?

  2. różnica kryteriów wyszukiwania między Like vs Contains() w Oracle

  3. ROWID (wyrocznia) – czy to ma zastosowanie?

  4. Skalowanie wartości dziesiętnej spowodowało obcięcie danych przez ODBC

  5. Tabela oracle lub widok nie istnieje z wnętrza procedury składowanej