Sehen Sie sich die MERGE-Anweisung an. Dies sollte tun, was Sie wollen - es ist der WHEN NOT MATCHED
Klausel, die dies tun wird.
Aufgrund der fehlenden Unterstützung von Oracle für eine echte VALUES()-Klausel ist die Syntax für einen einzelnen Datensatz mit festen Werten jedoch ziemlich ungeschickt:
MERGE INTO your_table yt
USING (
SELECT 42 as the_pk_value,
'some_value' as some_column
FROM dual
) t on (yt.pk = t.the_pke_value)
WHEN NOT MATCHED THEN
INSERT (pk, the_column)
VALUES (t.the_pk_value, t.some_column);
Ein anderer Ansatz (wenn Sie z. B. Massenladen aus einer anderen Tabelle durchführen) besteht darin, die Funktion "Fehlerprotokollierung" von Oracle zu verwenden. Die Anweisung würde wie folgt aussehen:
INSERT INTO your_table (col1, col2, col3)
SELECT c1, c2, c3
FROM staging_table
LOG ERRORS INTO errlog ('some comment') REJECT LIMIT UNLIMITED;
Danach sind alle Zeilen, die einen Fehler ausgelöst hätten, in der Tabelle errlog
verfügbar . Sie müssen dieses errlog
erstellen Tabelle (oder welchen Namen Sie auch immer wählen) manuell, bevor Sie die Einfügung mit DBMS_ERRLOG.CREATE_ERROR_LOG
ausführen .
Einzelheiten finden Sie im Handbuch