Tjek MERGE-erklæringen. Dette bør gøre, hvad du vil - det er
Gør til Oracles manglende understøttelse af en sand VALUES()-klausul, syntaksen for en enkelt post med faste værdier er dog ret klodset:
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);
En anden tilgang (hvis du f.eks. laver masseindlæsning fra en anden tabel) er at bruge "Fejllogning"-faciliteten i Oracle. Udsagnet ville se sådan ud:
INSERT INTO your_table (col1, col2, col3)
SELECT c1, c2, c3
FROM staging_table
LOG ERRORS INTO errlog ('some comment') REJECT LIMIT UNLIMITED;
Bagefter er alle rækker, der ville have givet en fejl, tilgængelige i tabellen errlog
. Du skal oprette den errlog
tabel (eller hvilket navn du nu vælger) manuelt, før du kører indsættelsen ved hjælp af DBMS_ERRLOG.CREATE_ERROR_LOG
.
Se manualen for detaljer