Jediný způsob (znám), jak zjistit, který řádek způsobuje problém, je použít funkci Oracle "přihlásit chyby do". Tímto způsobem insert
nevyvolá výjimku a každý řádek porušující jakékoli omezení bude zapsán do zadané tabulky chyb.
Chcete-li to provést, musíte nejprve vytvořit tabulku protokolu, která obsahuje odmítnuté řádky:
EXECUTE DBMS_ERRLOG.CREATE_ERROR_LOG('BD_VEHICLES_TEMP');
Tím se vytvoří tabulka s názvem ERR$_BD_VEHICLES_TEMP
Poté spusťte změnu příkazu na toto:
insert into bd_vehicles_temp
select *
from bd_vehicles_temp_1
LOG ERRORS REJECT LIMIT UNLIMITED;
Příkaz bude pokračovat, i když se na řádku nepodaří ověřit omezení. Po dokončení výpisu můžete zkontrolovat obsah tabulky ERR$_BD_VEHICLES_TEMP
pro řádky, které porušily omezení včetně chybové zprávy a hodnot.
(Edit):Pokud se chcete zastavit u první chyby (a uvidíte to v tabulce protokolů), vynechejte REJECT LIMIT UNLIMITED
doložka.
Další podrobnosti jsou v návodu:
- pro DBMS_ERRLOG http://docs. oracle.com/cd/B28359_01/appdev.111/b28419/d_errlog.htm#CEGBBABI
- pro klauzuli LOG ERRORS INTO:http ://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_9014.htm#BGBEIACB