10
Пакеты
Схема с функцией инициализации
Состояние
объявленные в __init__ переменные
Аналог спецификации
заголовки публичных подпрограмм
типы данных
#export-переменные из __init__ (по умолчанию все)
Аналог тела
публичные подпрограммы
внутренние #private-подпрограммы
Пакет в PostgresPro Enterprise — это схема, организованная
специальным образом. Сначала в схеме создается функция с именем
__init__ – функция инициализации.
Все переменные, объявленные в этой функции, становятся частью
состояния пакета. По умолчанию все переменные будут публичными, то
есть доступны снаружи пакета из подпрограмм, помеченных
модификатором #import. Но можно сделать публичными только часть
переменных, упомянув их в модификаторе #export, тогда все остальные
будут доступны только из подпрограмм пакета. Обращаться к
переменным пакета извне нужно по квалифицированному имени: имя-
пакета.имя-переменной.
Затем создаются пакетные подпрограммы – их помечают
модификатором #package. По умолчанию такие подпрограммы будут
публичными. Если же подпрограмма служит только для внутренних
нужд пакета, ее следует пометить модификатором #private.
При обращении к любой пакетной подпрограмме вызывается функция
инициализации, которая формирует состояние пакета. Сбросить его
можно вызовом функции инициализации или plpgsql_reset_packages
(это аналог DBMS_SESSION.RESET_PACKAGES в Oracle).
В пакетах нет явного разделения на спецификацию и тело. По сути,
спецификацию образуют заголовки публичных подпрограмм, публичные
переменные и типы данных, входящие в схему. Аналогом тела будут
все подпрограммы пакета: публичные и внутренние.
Пакет удобно создавать специальной командой CREATE PACKAGE.