- •Пакеты в PL / SQL
- •Пакеты PL/SQL
- •Спецификация пакета (1)
- •Спецификация пакета (2)
- •Тело пакета (1)
- •Тело пакета (2)
- •Тело пакета (3)
- •Глобальные конструкции пакета
- •Создание спецификации простого пакета catMgmt
- •Создание тела пакета catMgmt (1)
- •Создание тела пакета catMgmt (2)
- •Использование процедуры insertCat
- •Использование процедуры updateCat
- •Использование процедуры deleteCat
- •Вывод количества строк таблицы, обработанных в текущем сеансе
Пакеты в 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_.