Tốt nhất, tôi khuyên bạn nên sử dụng ghi chép lỗi DML. Ví dụ
Tạo bảng nhật ký lỗi
begin
dbms_errlog.create_error_log( dml_table_name => 'EMPLOYEE',
err_log_table_name => 'EMPLOYEE_ERR' );
end;
Sử dụng ghi nhật ký lỗi DML
BEGIN
insert into employee( id )
select id
from (select '01' id from dual
union all
select '02' from dual)
log errors into employee_err
reject limit unlimited;
END;
Đối với mọi hàng không thành công, thao tác này sẽ ghi dữ liệu cho hàng đó vào EMPLOYEE_ERR
bảng cùng với ngoại lệ. Sau đó, bạn có thể truy vấn bảng nhật ký lỗi để xem tất cả các lỗi thay vì chỉ nhận được hàng đầu tiên bị lỗi.
Nếu tạo bảng nhật ký lỗi không phải là một tùy chọn, bạn có thể chuyển từ SQL sang PL / SQL với các hoạt động hàng loạt. Điều đó sẽ chậm hơn nhưng bạn có thể sử dụng SAVE EXCEPTIONS
mệnh đề của FORALL
để tạo một bảng ngoại lệ lồng nhau mà sau đó bạn có thể lặp lại.