Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Lanjutkan MERGE setelah PENGECUALIAN

Anda dapat melakukannya dengan error_logging_clause . (Tautan untuk penyisipan karena dalam dokumentasi GABUNG dikatakan memiliki perilaku yang sama dengan sisipan.

Untuk kasus Anda :

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

Harap dicatat bahwa ada beberapa batasan untuk error_logging_clause. Dari dokumentasi :

  1. Kondisi berikut menyebabkan pernyataan gagal dan memutar kembali tanpa menggunakan kemampuan pencatatan kesalahan:

    • Melanggar batasan yang ditangguhkan.

    • Setiap operasi INSERT atau MERGE jalur langsung yang menimbulkan batasan unik atau pelanggaran indeks.

    • Setiap operasi pembaruan UPDATE atau MERGE yang menimbulkan pelanggaran indeks kendala unik).

  2. Anda tidak dapat melacak kesalahan dalam tabel pencatatan kesalahan untuk kolom LONG, LOB, atau tipe objek. Namun, tabel yang menjadi target operasi DML dapat berisi jenis kolom ini.

    • Jika Anda membuat atau memodifikasi tabel logging kesalahan yang sesuai sehingga berisi kolom dengan jenis yang tidak didukung, dan jika nama kolom tersebut sesuai dengan kolom yang tidak didukung dalam tabel DML target, maka pernyataan DML gagal pada waktu parse.

    • Jika tabel pencatatan kesalahan tidak berisi jenis kolom yang tidak didukung, maka semua kesalahan DML akan dicatat sampai batas penolakan kesalahan tercapai. Untuk baris di mana kesalahan terjadi, nilai kolom dengan kolom yang sesuai dalam tabel pencatatan kesalahan dicatat bersama dengan informasi kontrol.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle:Menggunakan CTE dengan klausa pembaruan

  2. Mendapatkan Rencana Eksekusi Aktual di Oracle 11g

  3. Cara memperbarui Oracle Clob dengan menggunakan JDBC

  4. konfigurasikan php dengan oracle

  5. Menggunakan VBS dan registri untuk menentukan versi dan driver oracle 32 vs. 64 bit mana yang diinstal