Idealmente, suggerirei di utilizzare la registrazione degli errori DML. Ad esempio
Crea la tabella del registro degli errori
begin
dbms_errlog.create_error_log( dml_table_name => 'EMPLOYEE',
err_log_table_name => 'EMPLOYEE_ERR' );
end;
Utilizza la registrazione degli errori 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;
Per ogni riga che non riesce, questo registrerà i dati per la riga in EMPLOYEE_ERR
tabella insieme all'eccezione. È quindi possibile eseguire una query sulla tabella del registro degli errori per visualizzare tutti gli errori anziché ottenere solo la prima riga che non è riuscita.
Se la creazione della tabella del registro degli errori non è un'opzione, è possibile passare da SQL a PL/SQL con operazioni di massa. Sarà più lento ma potresti usare SAVE EXCEPTIONS
clausola del FORALL
istruzione per creare una tabella nidificata di eccezioni su cui è possibile eseguire l'iterazione.