sql >> Database >  >> RDS >> Oracle

Oracle gelijk aan MySQL INVOEGEN NEGEREN?

Bekijk de MERGE-instructie. Dit zou moeten doen wat je wilt - het is de WHEN NOT MATCHED clausule die dit zal doen.

Vanwege Oracle's gebrek aan ondersteuning voor een echte VALUES()-clausule is de syntaxis voor een enkel record met vaste waarden echter behoorlijk onhandig:

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);

Een andere benadering (als u bijvoorbeeld bulksgewijs laadt vanuit een andere tabel) is om de "Error logging"-faciliteit van Oracle te gebruiken. De verklaring zou er als volgt uitzien:

 INSERT INTO your_table (col1, col2, col3)
 SELECT c1, c2, c3
 FROM staging_table
 LOG ERRORS INTO errlog ('some comment') REJECT LIMIT UNLIMITED;

Daarna zijn alle rijen die een fout zouden hebben gegenereerd beschikbaar in de tabel errlog . U moet die errlog . maken tabel (of welke naam u ook kiest) handmatig voordat u de insert uitvoert met DBMS_ERRLOG.CREATE_ERROR_LOG .

Zie de handleiding voor details



  1. Een inleiding tot SQL-indexen

  2. Parallelliseren van oproepen in PL/SQL

  3. Oracle 12cR2 nu in bèta

  4. De meest elegante manier om permutaties in SQL-server te genereren