Нет, ты не вернешься туда, где ты. Скорее код продолжает идти после обработки исключений.
Проверьте этот тест:
begin
dbms_output.put_line('One');
<<inner_one>>
begin
raise no_data_found;
dbms_output.put_line('Two');
exception
when no_data_found then
dbms_output.put_line('Three');
end inner_one;
dbms_output.put_line('Four');
raise no_data_found;
dbms_output.put_line('Five');
exception
when no_data_found then
dbms_output.put_line('Six');
end;
Вывод:
One
Three
Four
Six
Так что версия Try / Catch для Oracle заключается в использовании анонимных блоков внутри ваших блоков. Вы можете вкладывать блоки 255 раз, что много ..
Пример использования подблока для разбора строки даты, если она не удалась, используйте текущую дату / время.:
declare
l_date date;
begin
-- some code
-- parse date
begin
l_date := to_date(:input1, 'yyyy-mm-dd hh24:mi:ss');
exception
when others then
l_date := sysdate;
end;
--some more code
end;
С уважением
Олафур