In het ideale geval zou ik willen voorstellen om DML-foutregistratie te gebruiken. Bijvoorbeeld
Maak de foutenlogboektabel
begin
dbms_errlog.create_error_log( dml_table_name => 'EMPLOYEE',
err_log_table_name => 'EMPLOYEE_ERR' );
end;
Gebruik DML-foutregistratie
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;
Voor elke rij die mislukt, worden de gegevens voor de rij geregistreerd in de EMPLOYEE_ERR
tafel samen met de uitzondering. U kunt dan de foutenlogboektabel opvragen om alle fouten te zien in plaats van alleen de eerste rij te krijgen die mislukt is.
Als het maken van de foutenlogboektabel geen optie is, kunt u met bulkbewerkingen van SQL naar PL/SQL gaan. Dat zal langzamer zijn, maar u kunt de SAVE EXCEPTIONS
. gebruiken clausule van de FORALL
statement om een geneste tabel met uitzonderingen te maken die u vervolgens kunt herhalen.