Kolla in MERGE uttalandet. Detta bör göra vad du vill - det är
Åtgärda Oracles brist på stöd för en sann VALUES()-sats är syntaxen för en enda post med fasta värden ganska klumpig:
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);
Ett annat tillvägagångssätt (om du t.ex. gör massinläsning från en annan tabell) är att använda funktionen "Felloggning" i Oracle. Uttalandet skulle se ut så här:
INSERT INTO your_table (col1, col2, col3)
SELECT c1, c2, c3
FROM staging_table
LOG ERRORS INTO errlog ('some comment') REJECT LIMIT UNLIMITED;
Efteråt är alla rader som skulle ha orsakat ett fel tillgängliga i tabellen errlog
. Du måste skapa den errlog
tabell (eller vilket namn du än väljer) manuellt innan du kör infogningen med DBMS_ERRLOG.CREATE_ERROR_LOG
.
Se manualen för detaljer