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.