Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Работа с Oracle / Пакеты в PL SQL.pptx
Скачиваний:
9
Добавлен:
28.06.2021
Размер:
185.99 Кб
Скачать

Пакеты в PL / SQL

Пакеты в PL/SQL

Пакеты PL/SQL

Пакет – группа процедур, функций и других PL/SQL-кон- струкций, которые хранятся в БД как единое целое. Пакеты полезны для создания группы из нескольких процедур и функций, относящихся к определенному приложению.

Пакет имеет спецификацию и тело (можно создавать по отдельности). Можно заменить одно тело пакета другим, сохранив совместимость со спецификацией.

Тело пакета отделено от спецификации, т. к. пользователи пакета не обязаны знать детали его реализации.

Тело хранится, компилируется и обрабатывается внутри БД невидимо для пользователей пакета.

Спецификация пакета (1)

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

Секция объявлений содержит объявления функций, проце- дур, исключений, курсоров, переменных и констант, доступных для использования в теле пакета.

Переменные, присутствующие в спецификации пакета, называются переменными пакета. Они инициализиру- ются один раз — при первом обращении к пакету.

Спецификация пакета (2)

CREATE PACKAGE имя_пакета IS

[ объявления переменных и типов ] [ спецификации курсоров ]

[ спецификации функций и процедур ] END [ имя_пакета ] ;

Тело пакета (1)

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

Выполняемая секция пакета обычно используется для ини- циализации локальных переменных пакета или переменных пакета.

Выполнение этой секции производится один раз при загруз- ке пакета, поэтому ее не стоит использовать для каких-либо повторяющихся действий (обратиться к ней второй раз не удастся).

Тело пакета (2)

CREATE OR REPLACE PACKAGE BODY имя_пакета IS

[локальные объявления] [полные спецификации курсоров пакета] ,

[полные спецификации функций и процедур пакета] BEGIN

[выполняемые операторы] [EXCEPTION] [обработчики исключений] END [имя_пакета];

Тело пакета (3)

Для обращения к процедурам, переменным и функциям пакета используется нотация контейнер.содержимое.

Она имеет вид:

имя_пакета.объект_пакета.

Ранее использовали функцию dbms_output.put_line из пакета dbms_output, поставляемого Oracle.

При ссылках на функции внутри их собственного пакета нет необходимости помещать квалификатор имя_пакета перед именем функции.

Глобальные конструкции пакета

Переменные, константы и курсоры, объявленные в специфи- кации или в теле пакета, вне подпрограммы считаются

глобальными.

В отличие от локальных переменных, констант и курсоров, объявленных внутри процедур и функций, глобальные кон- струкции доступны всем процедурам и функциям пакета.

Их состояние в течение сеанса остается постоянным независимо от подпрограмм пакета.

Объявление глобальных переменных­ (и др. глобальных кон- струкций) предполагает­ использование префикса g_.

Создание спецификации простого пакета catMgmt

Создание тела пакета catMgmt (1)