No parecen:
set timing on
set serveroutput on
declare
x number := 0;
begin
dbms_output.put_line('No inner blocks');
for i in 1..1000000 loop
x := x + 1;
end loop;
dbms_output.put_line(x);
end;
/
anonymous block completed
Elapsed: 00:00:00.095
No inner blocks
1000000
Se ejecuta al mismo tiempo, con un poco de variación en cada sentido, como:
declare
x number := 0;
begin
dbms_output.put_line('Nested inner blocks');
for i in 1..1000000 loop
begin
begin
begin
begin
x := x + 1;
exception
when others then
raise;
end;
exception
when others then
raise;
end;
exception
when others then
raise;
end;
exception
when others then
raise;
end;
end loop;
dbms_output.put_line(x);
end;
/
anonymous block completed
Elapsed: 00:00:00.090
Nested inner blocks
1000000
Por supuesto, es posible que el compilador elimine las capas redundantes, pero no estoy seguro de que realmente pueda hacerlo con los controladores de excepción, ya que afectaría el resultado.
No he visto ninguna limitación sobre la profundidad de los bloques anidados:la documentación simplemente dice "los bloques se pueden anidar". El modelo que está utilizando, detectando un error específico y permitiendo que otros se propaguen, está bien y es bastante estándar, aunque obviamente en su ejemplo artificial no es necesario, pero lo sabe.