Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Oracle JDBC:Como saber qual linha gera restrição de chave exclusiva?


A única maneira (que eu conheço) de descobrir qual linha causa o problema é usar o recurso "registrar erros em" do Oracle. Dessa forma, o insert não lançará uma exceção e qualquer linha que viole qualquer restrição será gravada na tabela de erros especificada.

Para fazer isso, primeiro você precisa criar uma tabela de log que contenha as linhas rejeitadas:
EXECUTE DBMS_ERRLOG.CREATE_ERROR_LOG('BD_VEHICLES_TEMP');

Isso criará uma tabela chamada ERR$_BD_VEHICLES_TEMP

Em seguida, execute altere sua instrução para isso:
insert into bd_vehicles_temp 
select * 
from bd_vehicles_temp_1
LOG ERRORS REJECT LIMIT UNLIMITED;

A instrução continuará mesmo se uma linha não validar as restrições. Após a conclusão da instrução, você pode verificar o conteúdo da tabela ERR$_BD_VEHICLES_TEMP para as linhas que violaram uma restrição, incluindo a mensagem de erro e os valores.

(Editar):Se você quiser parar no primeiro erro (e ver isso na tabela de log), deixe de fora o REJECT LIMIT UNLIMITED cláusula.

Mais detalhes estão no manual: