Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МУ к лабораторным работам №11 Пакеты.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
131.35 Кб
Скачать

Правила построения пакетов

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

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

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

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

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

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

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

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

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

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

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

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

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

ПАКЕТ

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

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

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

Закрытая переменная

Тело пакета

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

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

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

Ссылается на …

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

Локальная переменная

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

Рисунок 1 – Спецификация пакета

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

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