sql >> Base de Datos >  >> RDS >> Oracle

Insertar Oracle si la fila no existe

Cuando ejecuto esto, aparece el error "falta la palabra clave INTO".

Porque IGNORE no es una palabra clave en Oracle. Esa es la sintaxis de MySQL.

Lo que puedes hacer es usar 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)
/

Desde Oracle 10g podemos usar merge sin manejar ambas ramas. En 9i tuvimos que usar una rama MATCHED "ficticia".

En versiones más antiguas, las únicas opciones eran:

  1. probar la existencia de la fila antes de emitir un INSERT (o en una subconsulta);
  2. para usar PL/SQL para ejecutar INSERT y manejar cualquier error DUP_VAL_ON_INDEX resultante.