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

Продължете MERGE след EXCEPTION

Можете да направите това с error_logging_clause . (Връзката е за вмъкване, защото в документацията на ОБЕДИВАНЕ казва, че има същото поведение като вмъкване.

За вашия случай:

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

Моля, обърнете внимание, че има някои ограничения за error_logging_clause. От документацията:

  1. Следните условия причиняват неуспех на оператора и връщане назад, без да се извиква възможността за регистриране на грешки:

    • Нарушени отложени ограничения.

    • Всяка операция INSERT или MERGE с директен път, която предизвиква уникално ограничение или нарушение на индекса.

    • Всяка операция за актуализиране UPDATE или MERGE, която повдига уникално нарушение на индекса на ограничение).

  2. Не можете да проследявате грешки в таблицата за регистриране на грешки за колони тип LONG, LOB или обект. Въпреки това таблицата, която е целта на DML операцията, може да съдържа тези типове колони.

    • Ако създадете или модифицирате съответната таблица за регистриране на грешки, така че да съдържа колона от неподдържан тип и ако името на тази колона съответства на неподдържана колона в целевата DML таблица, тогава DML операторът се проваля по време на анализ.

    • Ако таблицата за регистриране на грешки не съдържа неподдържани типове колони, тогава всички DML грешки се регистрират, докато не бъде достигнат лимитът за отхвърляне на грешки. За редове, в които възникват грешки, стойностите на колоните със съответните колони в таблицата за регистриране на грешки се регистрират заедно с контролната информация.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PL/SQL извлича имената на колоните на оператора SELECT от потребителска заявка

  2. hibernate oracle последователността произвежда голяма празнина

  3. Присъединете се към форума за въпроси и отговори за разработчици

  4. Как трябва да редактирам заявката, за да подобря производителността, като същевременно запазя съществуващата структура?

  5. Как да разрешите ORA-29283:невалидна файлова операция