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

Pokračujte v MERGE po EXCEPTION

Můžete to udělat pomocí clause_error_logging_clause . (Odkaz je pro přílohu, protože v dokumentaci SPOJENÍ říká, že má stejné chování jako vložka.

Pro váš případ:

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

Upozorňujeme, že pro klauzuli error_logging_clause existují určitá omezení. Z dokumentace:

  1. Následující podmínky způsobí, že příkaz selže a vrátí se zpět bez vyvolání funkce protokolování chyb:

    • Porušila odložená omezení.

    • Jakákoli operace INSERT nebo MERGE s přímou cestou, která vyvolává jedinečné omezení nebo porušení indexu.

    • Jakákoli operace aktualizace UPDATE nebo MERGE, která vyvolá jedinečné porušení indexu omezení).

  2. Nemůžete sledovat chyby v tabulce protokolování chyb pro sloupce typu LONG, LOB, orobject. Tabulka, která je cílem operace DML, však může obsahovat tyto typy sloupců.

    • Pokud vytvoříte nebo upravíte odpovídající tabulku protokolování chyb tak, aby obsahovala sloupec nepodporovaného typu, a pokud název tohoto sloupce odpovídá nepodporovanému sloupci v cílové tabulce DML, pak příkaz DML selže při analýze.

    • Pokud tabulka protokolování chyb neobsahuje žádné nepodporované typy sloupců, jsou protokolovány všechny chyby DML, dokud není dosaženo limitu odmítnutí chyb. U řádků, na kterých dochází k chybám, jsou spolu s řídicími informacemi protokolovány hodnoty sloupců s odpovídajícími sloupci v tabulce protokolování chyb.



  1. Minimální GRANTy potřebné pro mysqldump pro dumping úplného schématu? (Spouštěče chybí!!)

  2. PHP Není vybrána žádná databáze

  3. Nechejte (znovu) automatické zvyšování ID MySQL od 1

  4. Protokol transakcí serveru SQL, část 3:Základy protokolování