Шаг 96 - PL/SQL - Понятие пакета в языке PL/SQL

Немаловажным фактором является то, что мы с вами уже научились работать с процедурами PL/SQL. Как их создавать, передавать им параметры, изменять, удалять - я думаю это для вас уже не вызывает затруднений. Однако в PL/SQL есть еще одно очень, я бы сказал концептуальное и достаточно интересное понятие, а именно пакеты (package). Еще их называют модулями. Сама концепция пакета в PL/SQL пришла все из того же языка программирования Ada. Пакет позволяет в точном определении хранить связанные объекты в одном месте. Что это значит? Допустим, у вас есть группа функций или процедур которая выполняет, скажем, расчет заработной платы. Как правило, это 20-ть - 30-ть функций и процедур. Такое количество хранимых конструкций как правило приводит к тому, что после отладки вашего проекта, Вы уже смутно представляете себе, что делает каждая функция сама по себе, и как говорил персонаж моего любимого мультфильма - "Не понятно, что где валяется и когда все это кончится!" :) Так вот здесь нам на помощь и приходят пакеты (модули кому как больше нравится). Я думаю, вы все помните такую конструкцию:

	
.
.	
DBMS_OUTPUT.enable;
DBMS_OUTPUT.put_line('HELLO WORLD!');
.
.

Так вот это и есть пакет, который занимается тем что выводит "информацию на экран" (в переносном, смысле!). Если вы помните, то ранее я часто говорил - "Воспользуемся пакетом ... бла бла бла", тогда я не акцентировал внимание, а вот сейчас как раз настало время. Дело в том, что при установке сервера Oracle - происходит установка очень большого количества пакетов. Для работы с динамическими запросами DBMS_SQL, для работы с Web пакет DBMS_WEB и т.д. Все это огромное количество готового кода, который разработчики фирмы Oracle предоставляют в ваше распоряжение. К примеру, если посмотреть "глазами" PL/SQL - Developer то, пакет DBMS_OUTPUT выглядит в системе примерно вот так:

96_1.gif (15709 b)

Слева хорошо виден сам пакет, а справа первая сверху строчка "procedure put_line(a varchar2);" и есть как раз функция вывода "на экран". В отличие от процедур и функций, которые могут содержатся локально в блоке или хранится в базе данных, пакеты могут быть только хранимыми и никогда локальными! К слову при использовании пакетов, производительность системы увеличивается. По своей сути модуль представляет собой именованный раздел объявлений. В него могут входить, различные объявления, как то:

После их размещения, на них можно ссылаться из других блоков PL/SQL. По этому в них можно описывать глобальные переменные для PL/SQL. Давайте рассмотрим как описывается модуль. Каждый модуль состоит из двух частей описания (заголовка) и тела. Заголовок модуля определяется так:

CREATE OR REPLACE PACKAGE имя_модуля {IS AS}
	описание_процедуры |
	описание_функции |
	объявление_переменной |
	определение_типа |
	объявление_исключительной_ситуации |
	объявление_курсора |
END [имя_модуля];

Тело модуля определяется так:

											
CREATE OR REPLACE PACKAGE BODY имя_модуля {IS AS}
	код_инициализации_процедуры |
	код_инициализации_функции |
END [имя_модуля];

По большому счету тело модуля не является обязательной частью. Если заголовок модуля содержит описание, скажем нескольких переменных, типов и курсоров, то создавать тело модуля нет необходимости. Такой способ целесообразен при объявлении глобальных переменных, поскольку все объекты модуля видимы вне его пределов.

Возьмем на заметку следующее:

В следующий раз поучимся создавать то, что мы с вами рассмотрели.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Летучий Сергей - 17.02.2004