Idealnya, saya akan menyarankan menggunakan pencatatan kesalahan DML. Misalnya
Buat tabel log kesalahan
begin
dbms_errlog.create_error_log( dml_table_name => 'EMPLOYEE',
err_log_table_name => 'EMPLOYEE_ERR' );
end;
Gunakan pencatatan kesalahan 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;
Untuk setiap baris yang gagal, ini akan mencatat data untuk baris ke dalam EMPLOYEE_ERR
tabel bersama dengan pengecualian. Anda kemudian dapat menanyakan tabel log kesalahan untuk melihat semua kesalahan daripada hanya mendapatkan baris pertama yang gagal.
Jika membuat tabel log kesalahan bukanlah pilihan, Anda dapat berpindah dari SQL ke PL/SQL dengan operasi massal. Itu akan lebih lambat tetapi Anda bisa menggunakan SAVE EXCEPTIONS
klausa dari FORALL
pernyataan untuk membuat tabel pengecualian bersarang yang kemudian dapat Anda ulangi.