Составители:
Рубрика:
ГУАП МЦИТ
Введение в «ORACLE»
Под ред. проф. В.М.Космачёва
66
их в модуле полезно, так как это позволит ссылаться на них из других блоков PL/SQL. В модулях можно описывать и
глобальные переменные для PL/SQL.
Процедуры, функции и глобальные переменные, объединенные общим функциональным замыслом, часто оформляют
в виде единого объекта базы данных — пакета. Особенностью пакетов PL/SQL является раздельная компиляция и
хранение интерфейсной и исполнительной частей пакета. Пакет как объект состоит из двух частей: спецификации
пакета и тела пакета. В спецификации пакета хранится описание процедур, функций, глобальных переменных,
констант и курсоров, которые доступны для внешних приложений. В теле пакета определяются все процедуры,
функции и переменные, включая те, которые не были определены в спецификации пакета. Процедуры, функции и
переменные, определенные в теле пакета, но не описанные в его спецификации, являются локальными. Внешние по
отношению к пакету приложения не имеют права на использование локальных объектов пакета. Локальные объекты
предназначены исключительно для использования только процедурами и функциями самого пакета.
Особенностью пакетов PL/SQL является поддержка перегружаемых функций и процедур. Процедуры или функции
могут иметь одинаковое имя, но различный по типу или количеству набор аргументов. В момент обращения к
конкретной процедуре или функции по числу и типу передаваемых аргументов автоматически определяется
требуемая процедура или функция, которая и исполняется. Поддержка перегружаемых процедур, в частности, исполь-
зуется в стандартном пакете DBMS_OUTPUT для единой формы обращения к процедуре PUT_LINE для вывода
данных различных типов.
Напомним, что для создания пакета пользователь должен иметь привилегию CREATE PROCEDURE. Создание пакета
в схеме другого пользователя требует наличия привилегии CREATE ANY PROCEDURE.
Синтаксис оператора определения интерфейсной части (спецификации) пакета:
CREATE [OR REPLACE] PACKAGE [схема.]имя_пакета
{IS | AS}
спецификация_пакета_на_PL/SQL
Ключевое слово OR REPLACE указывает на безусловное замещение старого текста спецификации пакета. Если
ключевое слово OR REPLACE не указано, и пакет определен в системе, то замещения старого значения
спецификации пакета не происходит, и возвращается сообщение об ошибке. Спецификация пакета начинается с
описания констант и переменных. При описании переменных пакета ключевое слово DECLARE не используется.
Пример 2.3.28
Рассмотрим пример создания спецификации пакета, которая состоит из описания константы, функции и процедуры.
CREATE OR REPLACE PACKAGE РАС
IS
PAC_CONST CONSTANT NUMBER:=20;
FUNCTION MUL(Argl NUMBER, Arg2 NUMBER) RETURN NUMBER;
PROCEDURE AUDIT;
END;
/
Синтаксис оператора определения исполнительной части (тела) пакета:
CREATE [OR REPLACE] PACKAGE BODY [схема.]имя_пакета
{IS | AS}
cneцификaция_naкema_нa_PL/SQL
Ключевое слово OR REPLACE указывает на безусловное замещение старого текста спецификации пакета. Если
ключевое слово OR REPLACE не указано, и пакет определен в системе, то замещения старого значения
спецификации пакета не происходит, и возвращается сообщение об ошибке.
Определение тела пакета начинается с описания констант и переменных. Константы и переменные, описанные в
спецификации пакета, являются глобальными и в теле пакета повторно не описываются. При описании констант и
переменных пакета ключевое слово DECLARE не используется. При описании функций и процедур пакета в отличие
от описаний одиночных функций и процедур оператор CREATE не используется.
Рассмотрим пример создания тела пакета, спецификация которого приведена выше. Пусть функция пакета MUL
выполняет умножение аргументов на константу пакета, а процедура AUDIT фиксирует факт обращения к функции
MUL записью в таблицу значения счетчика обращений и текущей даты. Предполагается, что таблица TabAUD с
Страницы
- « первая
- ‹ предыдущая
- …
- 64
- 65
- 66
- 67
- 68
- …
- следующая ›
- последняя »
