středa 21. července 2010

Oracle a SQL*Loader

Protože jsem už více než měsíc “Oraclista”, zjistil jsem pár věcí, které mě neskutečně vytáčí. Mimo zvláštně fungujícího TNS Listeneru je to utilita SQL*Loader, která slouží k nahrávání velkých objemů dat do databáze.

No a co je bug měsíce? Máme extrakty, které chceme naloadovat. V extraktu je pole VARCHAR2 dlouhé 80 znaků. V databázi je toto pole zadefinováno jako VARCHAR2(100). Máme tedy dostatečnou rezervu pro to, abychom mohli extrakt importovat. Import se ale nepovede, ale proč?

Po delším pozorování jsem zjistil, že je vše způsobeno tím, že není definována v control file-u délka tohoto pole! Pak si loader z nesmyslného důvodu zvolí délku tuším 55 znaků…

Když jsem tedy napsal VARCHAR2(100), dostal jsem ještě jednu chybovou hlášku. Kde je problém tentokrát? SQL loader nezná VARCHAR2, musíme použít CHAR. No a to je už naštěstí ze záludností všechno ;)