Oracle
 sql >> Database >  >> RDS >> Oracle

Oracle JDBC:come sapere quale riga genera un vincolo di chiave univoco?

L'unico modo (che conosco) per scoprire quale riga causa il problema è utilizzare la funzione "registra errori in" di Oracle. In questo modo insert non genererà un'eccezione e qualsiasi riga che viola qualsiasi vincolo verrà scritta nella tabella degli errori specificata.

Per farlo devi prima creare una tabella di log che contenga le righe rifiutate:

EXECUTE DBMS_ERRLOG.CREATE_ERROR_LOG('BD_VEHICLES_TEMP');

Ciò creerà una tabella denominata ERR$_BD_VEHICLES_TEMP

Quindi esegui cambia la tua dichiarazione in questo:

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

L'istruzione continuerà anche se una riga non riesce a convalidare i vincoli. Al termine dell'istruzione puoi controllare il contenuto della tabella ERR$_BD_VEHICLES_TEMP per le righe che hanno violato un vincolo incluso il messaggio di errore ei valori.

(Modifica):se vuoi fermarti al primo errore (e vederlo nella tabella di registro), lascia fuori il REJECT LIMIT UNLIMITED clausola.

Maggiori dettagli sono nel manuale: