Ideelt set vil jeg foreslå at bruge DML-fejllogning. For eksempel
Opret fejllogtabellen
begin
dbms_errlog.create_error_log( dml_table_name => 'EMPLOYEE',
err_log_table_name => 'EMPLOYEE_ERR' );
end;
Brug DML-fejllogning
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;
For hver række, der fejler, vil dette logge dataene for rækken i EMPLOYEE_ERR
bord sammen med undtagelsen. Du kan derefter forespørge i fejllogtabellen for at se alle fejlene i stedet for kun at få den første række, der mislykkedes.
Hvis oprettelse af fejllogtabellen ikke er en mulighed, kan du flytte fra SQL til PL/SQL med bulk-operationer. Det vil være langsommere, men du kan bruge SAVE EXCEPTIONS
klausul i FORALL
sætning for at oprette en indlejret tabel med undtagelser, som du derefter kunne gentage.