select for update читаем статус запихиваем в переменную, далее ее проверяем если 1 то делаем еще апдейты/инсерты а в самом конце обновляем запись на 2.
почему перезапуск процедуры? в автономке все исключения обрабатываются и в итоге она в любом случае успешно завершится не важно был там ролбек или коммит