множественные / вложенные начало / конец, операторы функций в процедурах в pl / sql - PullRequest
0 голосов
/ 17 мая 2018

Я новичок в PL / SQL и не знаю, как написать это чисто и с хорошей практикой. Я читал и смотрел учебники, но эти примеры были намного проще, чем моя процедура. Чтобы создать «большую» читаемую, чистую процедуру, я бы использовал несколько и / или вложенные начало / конец и такие функции:

begin statement... function... end function exception end</p> <p>begin.... and so on

но я не уверен, что это простой способ написания PL / SQL. Мне нужно несколько выборок на разных таблицах, найти строки, использовать их и isert и обновить строки в разных таблицах. Все это за одну процедуру. В общем, я бы использовал начало / конец для новых операторов, объявляет только для локально используемых переменных и функций для операций над результатом оператора. Будет ли это хорошей практикой?

Спасибо за вашу помощь

1 Ответ

0 голосов
/ 17 мая 2018

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;

Если процедура сложная с большим количеством шагов, вы можете рассмотреть способы ее разбитьв меньшие многоразовые модули.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...