Oracle
 sql >> Base de données >  >> RDS >> Oracle

Oracle JDBC :comment savoir quelle ligne génère une contrainte de clé unique ?

La seule façon (que je connaisse) de savoir quelle ligne cause le problème est d'utiliser la fonction "enregistrer les erreurs dans" d'Oracle. De cette façon, le insert ne lèvera pas d'exception et toute ligne violant une contrainte sera écrite dans la table d'erreurs spécifiée.

Pour ce faire, vous devez d'abord créer une table de journal contenant les lignes rejetées :

EXECUTE DBMS_ERRLOG.CREATE_ERROR_LOG('BD_VEHICLES_TEMP');

Cela créera une table nommée ERR$_BD_VEHICLES_TEMP

Exécutez ensuite la modification de votre déclaration :

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

L'instruction continuera même si une ligne ne parvient pas à valider les contraintes. Une fois la déclaration terminée, vous pouvez vérifier le contenu de la table ERR$_BD_VEHICLES_TEMP pour les lignes qui ont violé une contrainte, y compris le message d'erreur et les valeurs.

(Edit) :Si vous voulez vous arrêter à la première erreur (et voir cela dans le tableau du journal), alors omettez le REJECT LIMIT UNLIMITED clause.

Plus de détails sont dans le manuel :