sql >> Databasteknik >  >> RDS >> Oracle

Fortsätt MERGE efter UNDANTAG

Du kan göra detta med error_logging_clause . (Länken är för infogningen eftersom i dokumentationen för SAMMANFATTNING det står att den har samma beteende som en insert.

För ditt fall:

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

Observera att det finns vissa begränsningar för error_logging_clausule. Från dokumentationen:

  1. Följande villkor gör att satsen misslyckas och rullas tillbaka utan att anropa felloggningsfunktionen:

    • Brott mot uppskjutna begränsningar.

    • Alla INSERT- eller MERGE-operationer med direkt väg som skapar en unik begränsning eller indexöverträdelse.

    • Alla uppdateringsåtgärder UPDATE eller MERGE som ger upphov till en unik överträdelse av begränsarindex).

  2. Du kan inte spåra fel i felloggningstabellen för kolumner av LONG, LOB eller objekttyp. Tabellen som är målet för DML-operationen kan dock innehålla dessa typer av kolumner.

    • Om du skapar eller ändrar motsvarande felloggningstabell så att den innehåller en kolumn av en typ som inte stöds, och om namnet på den kolumnen motsvarar en kolumn som inte stöds i mål-DML-tabellen, misslyckas DML-satsen vid analystillfället.

    • Om felloggningstabellen inte innehåller några kolumntyper som inte stöds loggas alla DML-fel tills avvisningsgränsen för fel nås. För rader där fel uppstår loggas kolumnvärden med motsvarande kolumner i felloggningstabellen tillsammans med kontrollinformationen.



  1. SQLite-kommandon

  2. Hur man tar bort en rad i Oracle

  3. Skapa pivotvy i SQL från en SQL-tabell

  4. Symfony3 - SQLSTATE[HY000] [2002] Ingen sådan fil eller katalog