Вижте изявлението MERGE. Това трябва да прави това, което искате - това е WHEN NOT MATCHED
клауза, която ще направи това.
Правете поради липсата на поддръжка от Oracle за истинска клауза VALUES(), синтаксисът за един запис с фиксирани стойности обаче е доста тромав:
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);
Различен подход (ако например извършвате групово зареждане от друга таблица) е да използвате функцията „Регистриране на грешки“ на Oracle. Изявлението би изглеждало така:
INSERT INTO your_table (col1, col2, col3)
SELECT c1, c2, c3
FROM staging_table
LOG ERRORS INTO errlog ('some comment') REJECT LIMIT UNLIMITED;
След това всички редове, които биха довели до грешка, са налични в таблицата errlog
. Трябва да създадете този errlog
таблица (или друго име, което изберете) ръчно, преди да стартирате вмъкването с помощта на DBMS_ERRLOG.CREATE_ERROR_LOG
.
Вижте ръководството за подробности