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:
- für DBMS_ERRLOG http://docs. oracle.com/cd/B28359_01/appdev.111/b28419/d_errlog.htm#CEGBBABI
- für die LOG ERRORS INTO-Klausel:http ://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_9014.htm#BGBEIACB