Họ dường như không:
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
Chạy cùng một lúc, với một chút thay đổi theo mỗi cách, như:
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
Tất nhiên có thể trình biên dịch đang loại bỏ các lớp thừa, nhưng tôi không chắc nó thực sự có thể với các trình xử lý ngoại lệ ở đó vì nó sẽ ảnh hưởng đến kết quả.
Tôi không thấy bất kỳ giới hạn nào về cách các khối lồng nhau sâu có thể đi - tài liệu chỉ nói 'các khối có thể được lồng vào nhau'. Mô hình bạn đang sử dụng, bắt một lỗi cụ thể và cho phép người khác phổ biến, là tốt và khá chuẩn - mặc dù rõ ràng trong ví dụ do bạn tạo ra thì điều đó là không cần thiết, nhưng bạn biết điều đó.