Oracle
 sql >> Database >  >> RDS >> Oracle

Continua UNISCI dopo ECCEZIONE

Puoi farlo con error_logging_clause . (Il link è per l'inserto perché nella documentazione di UNISCI dice che ha lo stesso comportamento di un inserto.

Per il tuo caso:

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

Tieni presente che ci sono alcune limitazioni per error_logging_clause. Dalla documentazione:

  1. Le seguenti condizioni causano l'errore e il rollback dell'istruzione senza richiamare la funzionalità di registrazione degli errori:

    • Vincoli differiti violati.

    • Qualsiasi operazione INSERT o MERGE del percorso diretto che solleva un vincolo univoco o una violazione dell'indice.

    • Qualsiasi operazione di aggiornamento UPDATE o MERGE che genera una violazione dell'indice del vincolo univoco).

  2. Non è possibile tenere traccia degli errori nella tabella di registrazione degli errori per le colonne LONG, LOB o di tipo oggetto. Tuttavia, la tabella che è la destinazione dell'operazione DML può contenere questi tipi di colonne.

    • Se crei o modifichi la tabella di registrazione degli errori corrispondente in modo che contenga una colonna di un tipo non supportato e se il nome di quella colonna corrisponde a una colonna non supportata nella tabella DML di destinazione, l'istruzione DML non riesce al momento dell'analisi.

    • Se la tabella di registrazione degli errori non contiene tipi di colonna non supportati, tutti gli errori DML vengono registrati fino al raggiungimento del limite di errori di rifiuto. Per le righe in cui si verificano errori, i valori delle colonne con le colonne corrispondenti nella tabella di registrazione degli errori vengono registrati insieme alle informazioni di controllo.