begin...end;
один ничего не делает.Вложенный блок нужен только в том случае, если у него есть declare
или exception
, который имеет смысл на этом уровне.
Например, внутренние ключевые слова begin
/ end
здесь бессмысленны, и вы можетепросто удалите их:
begin
...
begin
processing steps
end;
...
end;
Вложенный блок полезен, если мы хотим обрабатывать некоторые исключения только во вложенном блоке (например, обрабатывать no_data_found
исключения для определенного поиска или файловые операции для utl_file
).Это часто лучше, чем иметь обработчики исключений в конце, особенно для процедур с большим количеством этапов обработки:
begin
...
begin
processing steps
exception
when no_data_found then...
end;
...
end;
Аналогично, мы можем объявить локальную переменную или константу и т. Д. Только с областью действия вложенного блока.,Это, вероятно, менее обычное требование, чем пример исключения, но в некоторых случаях это может быть полезно:
begin
...
declare
x constant integer := whatever();
begin
processing steps using x
end;
...
end;
Если процедура сложная с большим количеством шагов, вы можете рассмотреть способы ее разбитьв меньшие многоразовые модули.