sql >> Databáze >  >> RDS >> Oracle

Oracle ekvivalentní MySQL INSERT IGNORE?

Podívejte se na prohlášení MERGE. To by mělo dělat to, co chcete - je to WHEN NOT MATCHED klauzule, která to udělá.

Na to, že Oracle nepodporuje skutečnou klauzuli VALUES(), je syntaxe pro jeden záznam s pevnými hodnotami dost nemotorná:

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);

Jiným přístupem (pokud například provádíte hromadné načítání z jiné tabulky) je použití zařízení Oracle „Protokolování chyb“. Příkaz by vypadal takto:

 INSERT INTO your_table (col1, col2, col3)
 SELECT c1, c2, c3
 FROM staging_table
 LOG ERRORS INTO errlog ('some comment') REJECT LIMIT UNLIMITED;

Poté jsou všechny řádky, které by vyvolaly chybu, dostupné v tabulce errlog . Musíte vytvořit tento errlog tabulku (nebo jakýkoli název, který si zvolíte) ručně před spuštěním vkládání pomocí DBMS_ERRLOG.CREATE_ERROR_LOG .

Podrobnosti naleznete v příručce



  1. Přeměňte výsledek databáze na pole

  2. SQL MIN() pro začátečníky

  3. Top 50 otázek k rozhovoru pro MySQL, které si musíte připravit v roce 2022

  4. Převod se nezdařil při převodu data a/nebo času ze znakového řetězce při vkládání datetime