वे नहीं दिखते:
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
एक ही समय में चलता है, हर तरह से थोड़ी भिन्नता के साथ:
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
बेशक यह संभव है कि संकलक अनावश्यक परतों को हटा रहा है, लेकिन मुझे यकीन नहीं है कि यह वास्तव में अपवाद हैंडलर के साथ हो सकता है क्योंकि यह परिणाम को प्रभावित करेगा।
मैंने इस बात पर कोई सीमा नहीं देखी है कि नेस्टेड ब्लॉक कितने गहरे जा सकते हैं - दस्तावेज़ीकरण केवल 'ब्लॉक को नेस्टेड किया जा सकता है' कहता है। आप जिस मॉडल का उपयोग कर रहे हैं, एक विशिष्ट त्रुटि पकड़ रही है और दूसरों को प्रचारित कर रही है, वह ठीक और सुंदर मानक है - हालांकि स्पष्ट रूप से आपके काल्पनिक उदाहरण में यह आवश्यक नहीं है, लेकिन आप इसे जानते हैं।