sql >> Database >  >> RDS >> Oracle

Ga verder met SAMENVOEGEN na UITZONDERING

U kunt dit doen met de error_logging_clause . (De link is voor de insert omdat in de documentatie van MERGE er staat dat het hetzelfde gedrag heeft als een insert.

Voor jouw geval:

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

Houd er rekening mee dat er enkele beperkingen zijn voor de error_logging_clause. Uit de documentatie:

  1. De volgende omstandigheden zorgen ervoor dat de instructie mislukt en terugdraait zonder de mogelijkheid voor foutregistratie aan te roepen:

    • Overtreden uitgestelde beperkingen.

    • Elke directe-pad INSERT- of MERGE-bewerking die een unieke beperking of indexschending veroorzaakt.

    • Elke update-bewerking UPDATE of MERGE die een unieke schending van de beperkingsindex oplevert).

  2. U kunt geen fouten volgen in de foutregistratietabel voor kolommen LONG, LOB of objecttype. De tabel die het doel is van de DML-bewerking kan dit soort kolommen echter bevatten.

    • Als u de corresponderende foutregistratietabel maakt of wijzigt zodat deze een kolom van een niet-ondersteund type bevat, en als de naam van die kolom overeenkomt met een niet-ondersteunde kolom in de doel-DML-tabel, mislukt de DML-instructie tijdens het parseren.

    • Als de foutregistratietabel geen niet-ondersteunde kolomtypen bevat, worden alle DML-fouten geregistreerd totdat de afwijzingslimiet voor fouten is bereikt. Voor rijen waarin fouten optreden, worden kolomwaarden met corresponderende kolommen in de foutregistratietabel samen met de controle-informatie gelogd.



  1. Hoe de sortering van een kolom in MySQL te tonen

  2. formulier pass geselecteerd naar volgende pagina

  3. JSON-functies zijn nu standaard ingeschakeld in SQLite

  4. Fout bij het uitvoeren van migraties op Heroku, PostgreSQL met Rails 5