Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Oracle odpowiednik MySQL INSERT IGNORE?

Sprawdź oświadczenie MERGE. Powinno to zrobić to, co chcesz — to WHEN NOT MATCHED klauzula, która to zrobi.

Jeśli chodzi o brak obsługi przez Oracle prawdziwej klauzuli VALUES(), składnia pojedynczego rekordu ze stałymi wartościami jest jednak dość niezgrabna:

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

Innym podejściem (jeśli np. wykonujesz ładowanie zbiorcze z innej tabeli) jest użycie funkcji „Rejestrowanie błędów” Oracle. Oświadczenie wyglądałoby tak:

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

Następnie wszystkie wiersze, które spowodowałyby błąd, są dostępne w tabeli errlog . Musisz utworzyć ten errlog tabeli (lub dowolnej wybranej nazwy) ręcznie przed uruchomieniem wstawiania przy użyciu DBMS_ERRLOG.CREATE_ERROR_LOG .

Szczegółowe informacje znajdziesz w instrukcji



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak stworzyć sekwencję Oracle zaczynającą się od maksymalnej wartości z tabeli?

  2. NLS_CHARSET_NAME() Funkcja w Oracle

  3. to jest błąd ORA-12154:TNS:nie można rozwiązać podanego identyfikatora połączenia?

  4. Korzystanie z bazy danych Oracle z CakePHP 2.0

  5. Jakie są tabele BIN$... w tabeli Oracle ALL_TAB_COLUMNS?