2011-09-15 36 views

Trả lời

8

Bạn có thể sử dụng tính năng đăng nhập lỗi của Oracle cho việc này:

Trước tiên, bạn cần phải tạo ra một bảng mà sau này sẽ chứa các hàng bỏ qua:

EXECUTE DBMS_ERRLOG.CREATE_ERROR_LOG('YOUR_TABLE', 'YOUR_TABLE_ERROR_LOG'); 

Điều đó tạo ra một bảng gọi là YOUR_TABLE_ERROR_LOG cho bảng tên YOUR_TABLE (rõ ràng bạn chỉ cần làm điều đó một lần).

Khi bạn chạy CẬP NHẬT của bạn, bạn cần phải thêm khoản LOG ERRORS:

UPDATE your_table 
    SET ... 
WHERE ... 
LOG ERRORS INTO YOUR_TABLE_ERROR_LOG ('UPDATE running at '||to_char(sysdate, 'yyyy-MM-dd HH24:MI:SS')) 
REJECT LIMIT UNLIMITED; 

Chuỗi được chỉ định là một giá trị tùy ý giúp bạn xác định các hành động đã tạo ra lỗi.

Sau khi cập nhật, bạn có thể truy vấn bảng YOUR_TABLE_ERROR_LOG để xem lỗi nào đã xảy ra và lý do. Nếu bạn không quan tâm đến các lỗi, chỉ cần cắt ngắn bảng nhật ký lỗi sau đó.

Để biết thêm thông tin chi tiết xem hướng dẫn:
http://download.oracle.com/docs/cd/E11882_01/server.112/e17118/statements_10008.htm#BCEFBFCD

Sửa 2014-10-27

Kể từ khi Oracle 11,2 có một gợi ý mới có tên CHANGE_DUPKEY_ERROR_INDEX mà có thể được sử dụng cho mục đích này. Tôi chưa bao giờ thử điều này mặc dù.

chi tiết trong cuốn hướng dẫn: http://docs.oracle.com/cd/E11882_01/server.112/e41084/sql_elements006.htm#CHDIFFJE

Đối INSERT hoạt động có một gợi ý tương tự tên IGNORE_ROW_ON_DUPKEY_INDEX:
http://docs.oracle.com/cd/E11882_01/server.112/e41084/sql_elements006.htm#CHDEGDDG

Một số ví dụ:

0

Thật khó để dứt khoát nói không (Oracle là lớn) nhưng trong 15 năm lập trình cơ sở dữ liệu tôi chưa bao giờ thấy một tính năng như thế này trong Oracle. Bạn có thể vô hiệu hóa các ràng buộc, nhưng đó không phải là điều tương tự như bạn đang cố gắng thực hiện ở đây.

Một cách giải quyết khác là viết một số PL/SQL xử lý bảng mà bạn đang cập nhật từng hàng, cố gắng thực hiện cập nhật và nuốt bất kỳ lỗi nào. Điều đó sẽ không hiệu quả, nhưng nó sẽ hoạt động. Nhưng trong mọi kịch bản tôi có thể tưởng tượng (trừ khi bạn có một bảng rất, rất phức tạp), bạn sẽ có thể viết truy vấn cập nhật của mình để bao gồm các truy vấn phụ thích hợp làm việc xung quanh các ràng buộc. Chiến lược chính xác sẽ phụ thuộc vào các bảng và truy vấn.

Các vấn đề liên quan