Процедуры, функции и параметры в PL/SQL

Илья Дергунов

Илья Дергунов

Автор статьи. ИТ-специалист с 20 летним стажем, автор большого количества публикаций на профильную тематику (разработка ПО, администрирование, новостные заметки). Подробнее.

Процедуры, функции , параметры PL/SQLРанее в наших блогах уже подробно рассматривались основные компоненты и конструкции языка PL/SQL: курсоры, исключения, циклы, переменные и т. д. Однако для создания хорошо структурированного, легкого для понимания и сопровождения приложения уметь работать с этими компонентами недостаточно — нужно правильно скомпоновать все части кода.

Лишь немногие задачи имеют тривиальное решение, которое можно сразу понять и не­медленно реализовать на бумаге (или на клавиатуре). Большинство проектируемых нами систем объемны и сложны, в них входит много взаимодействующих и даже конфликту­ющих компонентов. Кроме того, новые приложения значительно мощнее своих предше­ственников, что сопровождается еще большим усложнением их внутренней реализации. Сейчас одной из самых важных задач в профессии программиста является упрощение рабочей среды. Столкнувшись с исключительно сложной задачей, наш разум приходит в смятение. С чего начать? Как пробраться через эти джунгли требований и необходимой функциональности?

Человеческий разум не сравнится с большим параллельным компьютером. Даже самые выдающиеся умы едва ли смогут удерживать в памяти пять-семь задач одновременно. Большие проекты приходится разбивать на меньшие компоненты, а те, в свою очередь, делятся на отдельные программы. И лишь после создания этих программ мы сможем сконструировать из них полнофункциональные приложения.

Если воспользоваться нисходящим методом проектирования (то есть принципом по­шаговой проработки) или другой методологией, разбиение кода на процедуры, функции и объектные типы позволит создать качественное и легкое в сопровождении приложение.

 

Модульный код в PL/SQL

Модуляризацией называется разбиение больших блоков кода на меньшие блоки (моду­ли), которые можно вызывать из других модулей. Этот процесс сходен с нормализацией данных; он обладает теми же преимуществами и рядом дополнительных достоинств. В частности, модуляризация позволяет улучшить ряд характеристик кода:

  •  Пригодность для повторного использования. Разбивая большие программы на отдельные взаимодействующие компоненты, вы увидите, что многие модули используются более чем одной программой текущего приложения. При правильной организации такие программы даже могут пригодиться в других приложениях!
  •  Управляемость. Что удобнее отлаживать: одну программу в 10 000 строк или пять отдельных программ по 2000 строк, которые вызывают друг друга при необходи­мости? Наш разум лучше приспособлен к решению небольших задач. К тому же при использовании модульного подхода код можно протестировать и отладить на уровне отдельных программ (так называемое модульное тестирование), то есть до того, как отдельные модули будут скомбинированы для проведения более сложных интеграционных тестов.
  •  Удобство чтения. Имена модулей отражают их назначение. Чем больше кода будет перемещено в программный интерфейс или скрыто за ним, тем легче будет понять, что делает программа. Модуляризация дает возможность сосредоточиться на задаче в целом, а не на отдельных фрагментах кода. Возможно, вам даже удастся реализо­вать одну из самых сложных целей: создать самодокументируемый код.
  •  Надежность. Код, разбитый на модули, содержит меньше ошибок, а обнаруженные ошибки легче исправлять, так как они локализованы на уровне модуля. Кроме того, такой код легче сопровождать другим программистам, он имеет меньший объем и лучше читается.

Процедуры, функции, пакеты PL/SQL

Поскольку вы уже изучили все основные конструкции PL/SQL (циклы, условные пере­ходы и т. д.), то в принципе можете браться за написание программ. Однако для написа­ния качественного приложения необходимо уметь создавать и комбинировать модули.

В PL/SQL существует несколько конструкций для разбиения кода на модули:

  •  Процедура. Программа, которая осуществляет одно или несколько действий и вы­зывается как исполняемый оператор PL/SQL. Передавать данные процедуре и полу­чать их можно с помощью списка параметров.
  •  Функция. Программа, которая возвращает одно значение и используется как вы­ражение PL/SQL. Для передачи информации функции используется ее список параметров. Параметры также могут использоваться для возврата информации из функции, но обычно это считается проявлением плохого стиля программирования. О Триггер базы данных. Набор команд, который вызывается при выполнении не­которого события (подключение к базе данных, модификация строки таблицы или DDL-операция).
  •  Пакет. Именованный набор процедур, функций, типов и переменных. Пакет не является модулем (скорее, это мета-модуль), но он тесно связан с реализацией модульного подхода.
  •  Объектный тип или экземпляр объектного типа. Эмуляция объектно-ориенти­рованного класса в Oracle. Объектный тип инкапсулирует состояние и поведение данных, комбинируя их (как реляционная таблица) с правилами (процедурами и функциями, которые манипулируют этими данными).

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

Далее в моем блоге я расскажу Вам, как объявляются процедуры и функции и как устанавливаются списки параметров для них. Кроме того, мы исследуем такие «экзотические» аспекты разработки программ, как локальные модули, перегрузка, опережающие ссылки и де­терминированные функции.

 

Вас заинтересует / Intresting for you:

Команда GOTO PL/SQL на примере
Команда GOTO PL/SQL на примере 3129 просмотров Ирина Светлова Tue, 23 Jan 2018, 13:13:57
Программирование PL/SQL: расши...
Программирование PL/SQL: расши... 6514 просмотров Максим Николенко Fri, 18 Oct 2019, 06:01:24
Оптимизация приложения Oracle ...
Оптимизация приложения Oracle ... 2912 просмотров Александров Попков Fri, 16 Nov 2018, 14:41:20
Получение текущей даты и време...
Получение текущей даты и време... 15061 просмотров Ирина Светлова Tue, 05 Jun 2018, 12:19:34
Войдите чтобы комментировать

OraCool аватар
OraCool ответил в теме #9209 5 года 7 мес. назад
Ждем продолжения! Обзор функций, процедур, пакетов...