Удалить коммит из процедуры все вместе. Переместить его в вызывающий процесс. Например:
Create or replace procedure procedure abc(p1 varchar2, p2 ...)
is
begin
insert ....
end abc;
Процесс вызова становится примерно таким:
begin
for vars in (select c1, c2, ... from tab)
loop
....
abc(vars.v1, vars.c2, ...);
end loop;
COMMIT; -- only when transaction is complete;
end ;
Примечание; вызывающий процесс не должен быть plsql, это может быть что угодно, что может установить соединение с базой данных.