Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Oracle insere se a linha não existir


Quando executo isso, recebo o erro "missing INTO keyword" .

Porque IGNORE não é uma palavra-chave no Oracle. Essa é a sintaxe do MySQL.

O que você pode fazer é 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)
/

A partir do Oracle 10g podemos usar o merge sem manipular os dois branches. No 9i tivemos que usar um branch MATCHED "dummy".

Em versões mais antigas, as únicas opções eram:
  1. teste a existência da linha antes de emitir um INSERT (ou em uma subconsulta);
  2. para usar PL/SQL para executar o INSERT e manipular qualquer erro DUP_VAL_ON_INDEX resultante.