Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СУБД Oracle / Лекции / Лек_ORAC / LA / Создание пакетов.doc
Скачиваний:
44
Добавлен:
16.04.2013
Размер:
173.57 Кб
Скачать

Создание пакетов

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

Обычно пакет имеет спецификацию и тело, которые хранятся отдельно в базе данных.

  • Спецификация– это интерфейс с вашим приложением. В спецификации объявляются типы данных, переменные, константы, исключения, курсоры, а также доступные подпрограммы.

  • Тело пакетаполностью определяет курсоры и подпрограммы, реализуя спецификацию на практике.

Сам пакет нельзя вызвать, для него нельзя задать параметры, и он не может быть вложенным. Тем не менее, формат пакета аналогичен формату подпрограммы. Если пакет написан и откомпилирован, совместно пользоваться им могут многочисленные приложения.

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

Использование пакетов дает определенные преимущества.

Модульность. Вы собираете логически взаимосвязанные программные структуры в один модуль. Каждый пакет легко понять, а интерфейс между пакетами прост, понятен и хорошо определен.

Более простое проектирование приложений. Сначала вам нужна только интерфейсная информация, которая содержится в спецификации пакета. Написать и откомпилировать спецификацию можно и без тела пакета. Затем можно откомпилировать подпрограммы, обращающиеся к пакету. До тех пор, пока вы не будете готовы закончить приложение, полное определение тела пакета вам не требуется.

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

Дополнительные функциональные возможности. Пакетные общедоступные переменные и курсоры остаются неизменными до конца сеанса. Следовательно, они могут совместно использоваться всеми подпрограммами, выполняемыми в данном окружении. Кроме того, они позволяют хранить данные на протяжении нескольких транзакций, не помещая их в базу данных.

Повышение производительности. Когда какая-нибудь подпрограмма из пакета вызывается в первый раз, в память загружается весь пакет. Следовательно, последующие вызовы взаимосвязанных подпрограмм не требуют дополнительных операций ввода/вывода. Пакетные подпрограммы предотвращают также каскадное воздействие на зависимые единицы и позволяют таким образом избежать ненужной компиляции.

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

ПАКЕТ

Спецификацияпакета

Объявление процедуры А

Тело пакета

Частная процедура

Определение процедуры В

Общедос­тупнаяпроцедура

Определение процедуры А

Схема компонентов пакета

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

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

Спецификация пакета

При создании пакетов все общедоступные конструкции объявляются в спецификации пакета. Если спецификация пакета уже существует, используйте опцию REPLACE.

Если требуется, присвойте переменной при объявлении постоянное значение или формулу; в противном случае переменная автоматически принимает неопределенное начальное значение (NULL).

Синтаксис

CREATE [OR REPLACE] PACKAGE имя_пакета

[AUTHID] {CURRENT_USER | DEFINER}]

{IS | AS}

[определения общих структур данных]

[объявления общих переменных, типов и объектов]

[объявления исключений]

[директивы]

[спецификации курсоров]

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

END [имя_пакета];

Пример.

SQL> CREATE OR REPLACE PACKAGE comm_package IS

2 g_comm NUMBER := 10; -- начальное значение – 10

Соседние файлы в папке LA