sql >> Base de Datos >  >> RDS >> Oracle

Oracle JDBC:¿Cómo saber qué fila arroja una restricción de clave única?

La única forma (que conozco) de averiguar qué fila causa el problema es usar la función "registrar errores en" de Oracle. De esa forma el insert no arrojará una excepción y cualquier fila que viole cualquier restricción se escribirá en la tabla de errores especificada.

Para hacerlo, primero debe crear una tabla de registro que contenga las filas rechazadas:

EXECUTE DBMS_ERRLOG.CREATE_ERROR_LOG('BD_VEHICLES_TEMP');

Eso creará una tabla llamada ERR$_BD_VEHICLES_TEMP

Luego ejecute cambiar su declaración a esto:

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

La declaración continuará incluso si una fila no valida las restricciones. Una vez finalizada la declaración, puede verificar el contenido de la tabla ERR$_BD_VEHICLES_TEMP para las filas que violaron una restricción, incluido el mensaje de error y los valores.

(Editar):si desea detenerse en el primer error (y verlo en la tabla de registro), omita REJECT LIMIT UNLIMITED cláusula.

Más detalles están en el manual: