sql >> Databasteknik >  >> RDS >> Oracle

Oracle JDBC:Hur vet man vilken rad som har en unik nyckelbegränsning?

Det enda sättet (jag känner till) att ta reda på vilken rad som orsakar problemet är att använda Oracles "logga in fel i"-funktion. På det sättet insert kommer inte att skapa ett undantag och alla rader som bryter mot någon begränsning kommer att skrivas in i den angivna feltabellen.

För att göra det måste du först skapa en loggtabell som innehåller de avvisade raderna:

EXECUTE DBMS_ERRLOG.CREATE_ERROR_LOG('BD_VEHICLES_TEMP');

Det skapar en tabell med namnet ERR$_BD_VEHICLES_TEMP

Kör sedan ändra ditt uttalande till detta:

insert into bd_vehicles_temp 
select * 
from bd_vehicles_temp_1
LOG ERRORS REJECT LIMIT UNLIMITED;

Uttalandet fortsätter även om en rad inte validerar begränsningarna. När satsen är klar kan du kontrollera innehållet i tabellen ERR$_BD_VEHICLES_TEMP för raderna som bröt mot en begränsning inklusive felmeddelandet och värdena.

(Redigera):Om du vill sluta vid det första felet (och se det i loggtabellen), utelämna REJECT LIMIT UNLIMITED klausul.

Mer information finns i manualen:



  1. Bästa sättet att återställa en Oracle-sekvens till nästa värde i en befintlig kolumn?

  2. hämta base64-bilder från databasen

  3. Ta bort poster inom utlösaren istället för radera

  4. Vilken objekttyp returnerar exekveringsmetoden Spring Hibernate Template för en räknefråga på Oracle?