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

Kontynuuj MERGE po EXCEPTION

Możesz to zrobić za pomocą error_logging_clause . (Link dotyczy wstawki, ponieważ w dokumentacji POŁĄCZ mówi, że zachowuje się tak samo jak wstawka.

W Twoim przypadku :

-- You create your Log Table
EXECUTE DBMS_ERRLOG.CREATE_ERROR_LOG('copy_emp', 'TAB_ERR_COPY_EMP');


    MERGE INTO copy_emp c
     USING employees e
     ON (c.employee_id = e.employee_id)
   WHEN MATCHED THEN
     UPDATE SET
       c.first_name     = e.first_name,
       c.last_name      = e.last_name,
       c.email          = e.email,
       c.phone_number   = e.phone_number,
       c.hire_date      = e.hire_date,
       c.job_id         = e.job_id,
       c.salary         = e.salary,
       c.commission_pct = e.commission_pct,
       c.manager_id     = e.manager_id,
       c.department_id  = e.department_id
   WHEN NOT MATCHED THEN
     INSERT VALUES(e.employee_id, e.first_name, e.last_name,
          e.email, e.phone_number, e.hire_date, e.job_id,
          e.salary, e.commission_pct, e.manager_id,
          e.department_id)
    LOG ERRORS INTO TAB_ERR_COPY_EMP('TAG_STATEMENT') REJECT LIMIT 100;

Pamiętaj, że istnieją pewne ograniczenia dotyczące klauzuli error_logging_. Z dokumentacji :

  1. Następujące warunki powodują niepowodzenie instrukcji i wycofanie jej bez wywołania funkcji rejestrowania błędów:

    • Naruszono odroczone ograniczenia.

    • Dowolna operacja INSERT lub MERGE na ścieżce bezpośredniej, która powoduje naruszenie ograniczenia unikatowego lub naruszenia indeksu.

    • Każda operacja aktualizacji UPDATE lub MERGE, która powoduje naruszenie indeksu unikatowego elementu ograniczającego).

  2. Nie można śledzić błędów w tabeli rejestrowania błędów dla kolumn typu LONG, LOB lub orobject. Jednak tabela, która jest celem operacji DML, może zawierać tego typu kolumny.

    • Jeśli utworzysz lub zmodyfikujesz odpowiednią tabelę rejestrowania błędów tak, aby zawierała kolumnę nieobsługiwanego typu, a nazwa tej kolumny odpowiada nieobsługiwanej kolumnie w docelowej tabeli DML, instrukcja DML nie powiedzie się podczas analizy.

    • Jeśli tabela rejestrowania błędów nie zawiera żadnych nieobsługiwanych typów kolumn, wszystkie błędy DML są rejestrowane do momentu osiągnięcia limitu odrzucenia błędów. W przypadku wierszy, w których występują błędy, wartości kolumn z odpowiednimi kolumnami w tabeli rejestrowania błędów są rejestrowane wraz z informacjami kontrolnymi.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Przerwij równe okresy na koniec miesiąca

  2. Jak użyć kolumny obliczeniowej do obliczenia innej kolumny w tym samym widoku

  3. Zapytanie Oracle z każdą minutą dziennie

  4. ORA-01830:obraz w formacie daty kończy się przed konwersją całego ciągu wejściowego / Wybierz sumę, w której zapytanie o datę

  5. Oracle SQL automatycznie tworzy PK z przyrostem VARCHAR