- •Создание пакетов
- •3 Procedure reset_comm
- •4 (V_comm in number);
- •5 End comm_package;
- •2 Function validate_comm
- •V_mgr in emp.Mgr%type,
- •V_empno number;
- •Index by binary integer;
- •2 Emp_table emp_package.Emp_table type;
- •Index by binary_integer;
- •Into g_comm
- •Interest real; -- общая переменная
- •Interest number
- •Into interest --процедуры
- •V_message varchar2(50);
- •V_proc_name || ‘ end;’;
- •V_cursor integer;
- •V_return integer;
- •V_ename emp.Ename%type;
- •V_sal emp.Sal%type;
- •V_column_value varchar(30) ;
- •Var v_out1 varchar2(10);
- •Var v_out2 number;
- •Контрольные вопросы.
Создание пакетов
Пакеты собирают типы данных 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