Модуль (package) – это группа процедур, функций и других конструкций, хранимых вместе в базе данных как одна единица. Модули особенно полезны для компоновки нескольких процедур и функций, имеющих отношение к конкретному приложению баз данных.
Модуль состоит из двух частей: описания и тела.
• Описание модуля (package specification) определяет интерфейс связи с этим модулем. В описании модуля объявляются все переменные и именованные константы, курсоры, процедуры, функции и другие конструкции модуля, которые необходимо сделать доступными для программ, внешних по отношению к этому модулю. Другими словами, всё объявленное в описании модуля является общим.
• В теле модуля (package body) определяются все общие процедуры и функции, объявленные в описании модуля. Кроме того, в тело модуля могут включаться определения других конструкций, не указанных в его описании. Такие конструкции модуля являются частными, т. е. доступными только для программ внутри модуля.
Все переменные, константы и курсоры, объявленные в описании или в теле модуля, считаются глобальными. В отличие от частных переменных, констант и курсоров, объявленных в определенных процедурах и функциях, глобальные конструкции доступны всем процедурам и функциям модуля. Во время сеанса работы состояние глобальных конструкций не зависит от действий, выполняемых какими-либо подпрограммами модуля.
Ниже приведен пример определения описания модуля и его тела:
сreate or replace package part_mgmt is
--глобальная переменная
сurrent_part parts %rowtype;
--процедуры и функции
--insert_part вводит новый элемент ассортимента в таблицу parts
Как и в хранимых процедурах и функциях, вид ссылок на объекты модуля зависит от вызывающей среды. Однако приложения ссылаются на общие объекты модуля, как правило, при помощи стандартной уточняющей записи через точку. В следующем анонимном блоке PL/SQL демонстрируются способы ссылки на объекты модуля.
В ORACLE встроено несколько служебных модулей, предлагающих ряд дополнительных возможностей, недоступных в SQL или PL/SQL. Подробная информация по работе с некоторыми из них (DBMS_OUTPUT – модуль серверного вывода, DBMS_SQL – модуль “динамического SQL”, UTL_FILE – модуль файлового ввода/вывода, DBMS_PIPE – модуль взаимодействия между соединениями) будет предложена в последующих разделах.