DeepEdit!

Программирование баз данных на Oracle, техническая документация, литература, статьи и публикации

  • Увеличить размер шрифта
  • Размер шрифта по умолчанию
  • Уменьшить размер шрифта

Процедуры и функции

Свойства процедур и функций во многом схожи:
Могут возвращать более одного значения, используя параметры OUT.
Состоят из раздела объявлений, выполняемого раздела и раздела исключительных ситуаций.
Могут принимать значения по умолчанию.
Могут вызываться при помощи позиционного или именного пред­ставления.
Могут принимать параметры NOCOPY
Так когда же использовать функцию, а когда процедуру? Это обычно зависит от ожидаемого числа возвращаемых значений и от того, для чего они будут применяться. Принято руководствоваться следующим прави­лом: если возвращается более одного значения, то следует использовать процедуру, а если одно — функцию. Функции могут иметь параметры OUT (т.е. возвращать несколько значений), однако это считается некор­ректным стилем программирования. Функции можно вызывать также и из SQL-операторов (см. главу 10).

Модули
Модуль (package) — еще одно средство, пришедшее в PL/SQL из языка про­граммирования Ada. Модуль — это конструкция PL/SQL, которая позволя­ет хранить связанные объекты в одном месте. Модуль состоит из двух частей: описания и тела. Они хранятся по отдельности в словаре данных. В отличие от процедур и функций, которые могут содержаться локально в блоке или храниться в базе данных, модули могут быть только хранимыми и никогда локальными. Помимо того, что модули позволяют группировать связанные объекты, они полезны еще и тем, что ограничений, налагаемых зависимостями, в них меньше, чем в хранимых подпрограммах. Кроме
того, они имеют ряд свойств, улучшающих функционирование системы (см. главу 10).
В сущности, модуль представляет собой именованный раздел объявле­ний. Все, что может входить в состав раздела объявлений блока, может входить и в модуль: процедуры, функции, курсоры, типы и переменные. Размещение их в модуле полезно тем, что это позволяет обращаться к ним из других блоков PL/SQL, поэтому в модулях можно описывать гло­бальные переменные PL/SQL (внутри одного сеанса работы с базой данных).

Описание модуля
В описании, или спецификации, модуля (package specification), называемом также заголовком модуля (package header), содержится информация о со­ставе модуля, однако в описание не входит текст процедур. Рассмотрим пример:
В модуле ClassPackage содержатся три процедуры, тип и исключительная ситуация. Общий синтаксис создания заголовка модуля выглядит следую­щим образом:
Элементы модуля (описания процедур и функций, переменные и т.д.) аналогичны тому, что указывается в разделе объявлений анонимного блока. Для заголовка модуля действуют те же синтаксические правила, что и для раздела за исключением объявлений процедур и функций. Перечислим эти правила:
•  Элементы модуля могут указываться в любом порядке. Однако, как и в разделе объявлений, объект должен быть объявлен до того, как на него будут произведены ссылки. Например, если частью предложе­ния WHERE курсора является некоторая переменная, она должна быть объявлена до объявления курсора.
       Совсем не обязательно, чтобы присутствовали элементы всех ви­дов. К примеру, модуль может состоять только из описаний проце­дур и функций и не содержать объявлений исключительных ситуаций или типов.
       Объявления всех процедур и функций должны быть предваритель­ными. В предварительном объявлении (forward declaration) описывают­ся подпрограмма и ее аргументы (если есть), но не включается программный текст (см. главу 10). В этом отличие модуля от раздела объявлений блока, где могут находиться как предварительные объ­явления, так и текст процедур и функций. Программный текст про­цедур и функций модуля содержится в теле этого модуля.
 









jAntivirus