sql >> Database teknologi >  >> RDS >> Oracle

Oracle svarende til MySQL INSERT IGNORE?

Tjek MERGE-erklæringen. Dette bør gøre, hvad du vil - det er NÅR IKKE MATCHED klausul, der vil gøre dette.

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



  1. mysql_fetch_array()/mysql_fetch_assoc()/mysql_fetch_row()/mysql_num_rows osv... forventer, at parameter 1 er ressource

  2. Anbefalet måde/ordre at læse data fra en webservice, parse disse data og indsætte dem i en SQLite db

  3. Forespørg kun de første data fra en tabel

  4. MySQL-paginering uden dobbeltforespørgsel?