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

Oracle equivalente ao MySQL INSERT IGNORE?


Confira a declaração MERGE. Isso deve fazer o que você deseja - é o WHEN NOT MATCHED cláusula que fará isso.

Devido à falta de suporte do Oracle para uma cláusula VALUES() verdadeira, a sintaxe para um único registro com valores fixos é bastante desajeitada:
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);

Uma abordagem diferente (se você estiver, por exemplo, fazendo carregamento em massa de uma tabela diferente) é usar o recurso "Log de erros" do Oracle. A declaração ficaria assim:
 INSERT INTO your_table (col1, col2, col3)
 SELECT c1, c2, c3
 FROM staging_table
 LOG ERRORS INTO errlog ('some comment') REJECT LIMIT UNLIMITED;

Depois, todas as linhas que teriam gerado um erro estão disponíveis na tabela errlog . Você precisa criar esse errlog tabela (ou qualquer nome que você escolher) manualmente antes de executar a inserção usando DBMS_ERRLOG.CREATE_ERROR_LOG .

Consulte o manual para detalhes