Oracle
 sql >> база данни >  >> RDS >> Oracle

Oracle Еквивалент на MySQL INSERT IGNORE?

Вижте изявлението MERGE. Това трябва да прави това, което искате - това е WHEN NOT MATCHED клауза, която ще направи това.

Правете поради липсата на поддръжка от Oracle за истинска клауза VALUES(), синтаксисът за един запис с фиксирани стойности обаче е доста тромав:

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

Различен подход (ако например извършвате групово зареждане от друга таблица) е да използвате функцията „Регистриране на грешки“ на Oracle. Изявлението би изглеждало така:

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

След това всички редове, които биха довели до грешка, са налични в таблицата errlog . Трябва да създадете този errlog таблица (или друго име, което изберете) ръчно, преди да стартирате вмъкването с помощта на DBMS_ERRLOG.CREATE_ERROR_LOG .

Вижте ръководството за подробности



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да актуализирате с вътрешно присъединяване в Oracle

  2. Как да извика съхранена процедура в JDBC

  3. Как да върнете списък с поддържани територии в Oracle

  4. Извеждане от експлоатация на агент в EM13c

  5. Писане в ExcelSheet с помощта на пакет UTL_FILE в Oracle