Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle JDBC:Woher wissen, welche Zeile eine eindeutige Schlüsselbeschränkung auslöst?

Die einzige mir bekannte Möglichkeit, herauszufinden, welche Zeile das Problem verursacht, besteht darin, die Funktion "Fehler protokollieren" von Oracle zu verwenden. So das insert löst keine Ausnahme aus und jede Zeile, die gegen eine Einschränkung verstößt, wird in die angegebene Fehlertabelle geschrieben.

Dazu müssen Sie zunächst eine Protokolltabelle erstellen, die die abgelehnten Zeilen enthält:

EXECUTE DBMS_ERRLOG.CREATE_ERROR_LOG('BD_VEHICLES_TEMP');

Dadurch wird eine Tabelle mit dem Namen ERR$_BD_VEHICLES_TEMP erstellt

Führen Sie dann aus, ändern Sie Ihre Anweisung in diese:

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

Die Anweisung wird auch dann fortgesetzt, wenn eine Zeile die Einschränkungen nicht validieren kann. Nachdem die Anweisung beendet ist, können Sie den Inhalt der Tabelle ERR$_BD_VEHICLES_TEMP überprüfen für die Zeilen, die gegen eine Einschränkung verstoßen haben, einschließlich der Fehlermeldung und der Werte.

(Bearbeiten):Wenn Sie beim ersten Fehler aufhören möchten (und das in der Protokolltabelle sehen), lassen Sie das REJECT LIMIT UNLIMITED weg Klausel.

Weitere Einzelheiten finden Sie im Handbuch: