sql >> Databáze >  >> RDS >> Oracle

ORA-01401:vložená hodnota je pro sloupec CHAR příliš velká

Váš datový soubor obsahuje další neviditelné znaky. Originál nevidíme, ale pravděpodobně byl vytvořen ve Windows a má CRLF nové oddělovače řádků; a používáte SQL*Loader v prostředí UNIX/Linux, které očekává pouze posun řádků (LF). Znaky pro návrat vozíku (CR) jsou stále v souboru a Oracle je vidí jako součást pole ZIP v souboru.

Poslední řádek nemá CRLF (ani žádnou značku nového řádku), takže na tomto řádku – a pouze ten řádek - pole ZIP je vnímáno jako 5 znaků, pro všechny ostatní je to vidět jako šest, např. 98001^M .

Další informace o výchozím chování si můžete přečíst v dokumentaci :

Pokud otevřete datový soubor v úpravě, jako je vi nebo vim, uvidíte tyto další ^M řídicí znaky.

Existuje několik způsobů, jak to opravit. Soubor můžete upravit; nejjednodušší věc, kterou můžete udělat, je zkopírovat a vložit data do nového souboru vytvořeného v prostředí, ve kterém budete spouštět SQL*Loader. Existují nástroje pro převod koncovek řádků, pokud chcete, např. dos2unix . Nebo váš editor Windows může být schopen uložit soubor bez CR. Do datového souboru můžete také přidat další oddělovač polí, jak navrhl Ditto.

Nebo můžete SQL*Loaderu říci, aby očekával CRLF, změnou INFILE řádek:

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

... i když to pak způsobí problémy, pokud dodáte soubor vytvořený v Linuxu bez znaků CR.



  1. Nesprávná celočíselná hodnota:'' pro sloupec

  2. Symfony neobsluhuje souběžné požadavky

  3. Ukládání koncových nul v databázi pomocí JPA a Oracle

  4. Vysvětlení výkonu a úrovní služeb Azure SQL Database