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

Oracle JDBC:Jak zjistit, který řádek vyvolává jedinečné klíčové omezení?

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:



  1. Návrh databáze pro komentáře a odpovědi

  2. Jaká pravidla platí pro pojmenování sloupce mysql?

  3. Oracle Unicode Spooling

  4. Jak se připojit a extrahovat v SQL