Lihat pernyataan MERGE. Ini harus melakukan apa yang Anda inginkan - ini adalah WHEN NOT MATCHED
klausa yang akan melakukan ini.
Lakukan untuk Oracle kurangnya dukungan untuk klausa VALUES() yang benar, sintaks untuk satu catatan dengan nilai tetap cukup kikuk:
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);
Pendekatan yang berbeda (jika Anda misalnya melakukan pemuatan massal dari tabel yang berbeda) adalah dengan menggunakan fasilitas "Error logging" dari Oracle. Pernyataannya akan terlihat seperti ini:
INSERT INTO your_table (col1, col2, col3)
SELECT c1, c2, c3
FROM staging_table
LOG ERRORS INTO errlog ('some comment') REJECT LIMIT UNLIMITED;
Setelah itu semua baris yang akan melontarkan kesalahan tersedia di tabel errlog
. Anda perlu membuat errlog
itu tabel (atau nama apa pun yang Anda pilih) secara manual sebelum menjalankan penyisipan menggunakan DBMS_ERRLOG.CREATE_ERROR_LOG
.
Lihat manual untuk detailnya