Podívejte se na prohlášení MERGE. To by mělo dělat to, co chcete - je to WHEN NOT MATCHED
klauzule, která to udělá.
Na to, že Oracle nepodporuje skutečnou klauzuli VALUES(), je syntaxe pro jeden záznam s pevnými hodnotami dost nemotorná:
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);
Jiným přístupem (pokud například provádíte hromadné načítání z jiné tabulky) je použití zařízení Oracle „Protokolování chyb“. Příkaz by vypadal takto:
INSERT INTO your_table (col1, col2, col3)
SELECT c1, c2, c3
FROM staging_table
LOG ERRORS INTO errlog ('some comment') REJECT LIMIT UNLIMITED;
Poté jsou všechny řádky, které by vyvolaly chybu, dostupné v tabulce errlog
. Musíte vytvořit tento errlog
tabulku (nebo jakýkoli název, který si zvolíte) ručně před spuštěním vkládání pomocí DBMS_ERRLOG.CREATE_ERROR_LOG
.
Podrobnosti naleznete v příručce