- •Лабораторная работа № 11. Пакеты oracle pl/sql
- •Цель работы
- •2 Методические указания
- •3 Задания к лабораторной работе № 11
- •4. Теоретический материал Создание пакетов
- •Правила построения пакетов
- •Спецификация пакета
- •Указания по разработке пакетов:
- •Правила вызова элементов пакета
- •Удаление пакетов
- •Перегрузка пакетов
- •Порядок разрешения вызова
- •Предварительное объявление
- •Одноразовые процедуры
- •Побочные эффекты
- •Ограничение функции в правах обращения
- •Курсорные переменные и пакеты
Правила построения пакетов
Конструкция пакета очень проста. Для построения пакета необходимо создать его спецификацию и, почти всегда, тело пакета. Необходимо решить, какие элементы попадут в спецификацию, а какие будут скрыты в теле пакета. Можно также написать блок кода, который Oracle будет использовать для инициализации пакета.
Обычно пакет имеет спецификацию и тело, которые хранятся отдельно в базе данных.
Спецификация – это интерфейс с вашим приложением. В спецификации объявляются типы данных, переменные, константы, исключения, курсоры, а также доступные подпрограммы.
Тело пакета полностью определяет курсоры и подпрограммы, реализуя спецификацию на практике.
Сам пакет нельзя вызвать, для него нельзя задать параметры, и он не может быть вложенным. Тем не менее, формат пакета аналогичен формату подпрограммы. Если пакет написан и откомпилирован, совместно пользоваться им могут многочисленные приложения.
Когда какая-нибудь PL/SQL-конструкция из пакета вызывается в первый раз, в память загружается весь пакет. Следовательно, последующие вызовы взаимосвязанных конструкций не требуют операций ввода/вывода.
Использование пакетов дает определенные преимущества:
Модульность. Вы собираете логически взаимосвязанные программные структуры в один модуль. Каждый пакет легко понять, а интерфейс между пакетами прост, понятен и хорошо определен.
Более простое проектирование приложений. Сначала вам нужна только интерфейсная информация, которая содержится в спецификации пакета. Написать и откомпилировать спецификацию можно и без тела пакета. Затем можно откомпилировать подпрограммы, обращающиеся к пакету. До тех пор, пока вы не будете готовы закончить приложение, полное определение тела пакета вам не требуется.
Сокрытие информации. Вы можете решить, какие конструкции будут общедоступными (видимыми и доступными для всех), а какие - частными (скрытыми и недоступными). Пакет скрывает определения частных конструкций, поэтому в случае изменения определения это отразится только на пакете, а не на вашем приложении. Кроме того, скрывая подробности реализации от пользователей, вы защищаете целостность пакета.
Дополнительные функциональные возможности. Пакетные общедоступные переменные и курсоры остаются неизменными до конца сеанса. Следовательно, они могут совместно использоваться всеми подпрограммами, выполняемыми в данном окружении. Кроме того, они позволяют хранить данные на протяжении нескольких транзакций, не помещая их в базу данных.
Повышение производительности. Когда какая-нибудь подпрограмма из пакета вызывается в первый раз, в память загружается весь пакет. Следовательно, последующие вызовы взаимосвязанных подпрограмм не требуют дополнительных операций ввода/вывода. Пакетные подпрограммы предотвращают также каскадное воздействие на зависимые единицы и позволяют таким образом избежать ненужной компиляции.
Перегрузка. Пакеты позволяют перегружать (overload) процедуры и функции. Это означает, что в одном и том же пакете можно создать несколько одноименных подпрограмм, каждая из которых принимает параметры различного числового или иного типа данных.
ПАКЕТ
Общедоступная
переменная
Спецификация
пакета
Объявление
процедуры А
Закрытая
переменная
Тело
пакета
Частная процедура
Определение
процедуры В
Общедоступная
процедура
Ссылается
на …
Определение
процедуры А
Локальная
переменная
Схема компонентов пакета |
Рисунок 1 – Спецификация пакета
Создать пакет можно в два этапа: сначала спецификацию, а затем тело пакета. Общедоступные пакетные конструкции - это те, которые объявляются в спецификации, а определяются в теле пакета. Частные конструкции полностью определяются в теле пакета.
Примечание: В базе данных, сервер Oracle хранит спецификацию и тело пакета отдельно. Это позволяет изменить определение программной конструкции в теле пакета, не заставляя сервер Oracle сделать недействительными другие объекты схемы, которые вызывают данную программную конструкцию или ссылаются на нее.
