Oracle
 sql >> Base de données >  >> RDS >> Oracle

Insertion Oracle si la ligne n'existe pas

Lorsque je lance ceci, j'obtiens l'erreur "mot clé INTO manquant".

Parce que IGNORE n'est pas un mot-clé dans Oracle. C'est la syntaxe MySQL.

Ce que vous pouvez faire, c'est utiliser 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)
/

À partir d'Oracle 10g, nous pouvons utiliser la fusion sans gérer les deux branches. Dans 9i, nous devions utiliser une branche MATCHED "factice".

Dans les versions plus anciennes, les seules options étaient soit :

  1. tester l'existence de la ligne avant d'émettre un INSERT (ou dans une sous-requête) ;
  2. pour utiliser PL/SQL pour exécuter l'INSERT et gérer toute erreur DUP_VAL_ON_INDEX résultante.