Если первая хранимая процедура SP1 выдает коммит, то любые уже сделанные изменения будут постоянными. В этом случае, если SP2 не удается, изменения, сделанные SP1, не будут откатываться.
IMO, вызывающее приложение должно быть тем, которое обрабатывает логику транзакции, то есть не выполняет коммит или откат в ваших процедурах PL / SQL. Позвольте ошибкам распространяться на вызывающее приложение, таким образом, механизм PL / SQL откатит только работу, выполненную ошибочной процедурой, а не всю транзакцию.
Пусть вызывающее приложение решает, что делать в случае ошибки (повторить попытку, выполнить половину работы? Или выполнить откат).