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

Inserisci Oracle se la riga non esiste

Quando lo eseguo, ottengo l'errore "parola chiave INTO mancante".

Perché IGNORE non è una parola chiave in Oracle. Questa è la sintassi MySQL.

Quello che puoi fare è usare MERGE.

merge into table1 t1
    using (select 'value1' as value1 ,value2 
           from table2 
           where table2.type = 'ok' ) t2
    on ( t1.value1 = t2.value1)
when not matched then
   insert values (t2.value1, t2.value2)
/

Da Oracle 10g possiamo usare merge senza gestire entrambi i rami. In 9i abbiamo dovuto usare un ramo MATCHED "dummy".

Nelle versioni più antiche le uniche opzioni erano:

  1. verifica l'esistenza della riga prima di emettere un INSERT (o in una sottoquery);
  2. per utilizzare PL/SQL per eseguire INSERT e gestire qualsiasi errore DUP_VAL_ON_INDEX risultante.