Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Tiếp tục MERGE sau EXCEPTION

Bạn có thể thực hiện việc này với error_logging_clause . (Liên kết dành cho phần chèn vì trong tài liệu của MERGE nó nói rằng nó có hành vi giống như một phần chèn.

Đối với trường hợp của bạn:

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

Xin lưu ý rằng có một số hạn chế đối với error_logging_clause. Từ tài liệu:

  1. Các điều kiện sau đây khiến câu lệnh bị lỗi và quay ngược trở lại mà không cần gọi khả năng ghi lỗi:

    • Các ràng buộc hoãn lại bị vi phạm.

    • Bất kỳ thao tác INSERT hoặc MERGE đường dẫn trực tiếp nào gây ra vi phạm chỉ mục hoặc ràng buộc đơn.

    • Bất kỳ hoạt động cập nhật UPDATE hoặc MERGE nào làm tăng vi phạm chỉ mục trình giới hạn duy nhất).

  2. Bạn không thể theo dõi lỗi trong bảng ghi lỗi cho các cột DÀI, LOB, loại đối tượng. Tuy nhiên, bảng là mục tiêu của hoạt độngDML có thể chứa các loại cột này.

    • Nếu bạn tạo hoặc sửa đổi bảng ghi lỗi tương ứng để chứa một cột thuộc loại không được hỗ trợ và nếu tên của cột đó tương ứng với cột không được hỗ trợ trong bảng DML đích, thì câu lệnh DML không thành công tại thời điểm phân tích cú pháp.

    • Nếu bảng ghi lỗi không chứa bất kỳ kiểu cột nào không được hỗ trợ, thì tất cả các lỗi DML sẽ được ghi lại cho đến khi đạt đến giới hạn loại bỏ lỗi. Đối với các hàng có lỗi xảy ra, giá trị cột với các cột tương ứng trong bảng ghi lỗi được ghi cùng với thông tin điều khiển.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tham gia một bảng với chính nó trong Oracle

  2. Đếm số hàng đã nối trong phép nối bên trái

  3. ORA-01722:số không hợp lệ trên Entity Framework

  4. Làm cách nào để CHỌN từ cột kiểu đối tượng trong Oracle 11g?

  5. Thiếu chuỗi trong HSQL để kiểm tra