sql >> Databasteknik >  >> RDS >> Oracle

Oracle Motsvarar MySQL INSERT IGNORE?

Kolla in MERGE uttalandet. Detta bör göra vad du vill - det är NÄR INTE MATCHED klausul som kommer att göra detta.

Å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



  1. En begränsning som bara tillåter en av två tabeller att referera till en bastabell

  2. TRANSLATE(… ANVÄNDER) Funktion i Oracle

  3. SQL Server Update Trigger, få endast modifierade fält

  4. Hur man ställer in intervallutdataformatet i PostgreSQL