Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Shpory_BD.doc
Скачиваний:
57
Добавлен:
26.09.2019
Размер:
254.46 Кб
Скачать

16. Подпрограммы. Пакеты. Хранимые подпрограммы.

Подпрограммы – это блоки PL/SQL с именами, которые могут быть вызваны и могут принимать параметры. Имеются два типа подпрограмм: процедуры и функции. Обычно процедуры используются, если необходимо выполнить некоторое действие, а функции – если необходимо вычислить некоторое значение. Синтаксис объявления процедуры и функции следующий:PROCEDURE имяпроцедуры [(параметр [, параметр]…)] IS[локальныеобъявления]BEGIN

исполняемыеутверждения [EXCEPTIONобработчикиисключений ]END [имяпроцедуры];FUNCTION имяфункции [(параметр [, параметр]…)] RETURN типданных

IS[локальныеобъявления]BEGINисполняемыеутвержденияEND [имяфункции];

Описания параметров задаются следующим образом:

имяпараметра [IN | OUT [NOCOPY] | IN OUT [NOCOPY] ] типпараметра [:= | DEFAULT] выражение

Фразы IN (которая принимается по умолчанию), OUT и IN OUT означают соответственно входные, выходные и модифицируемые параметры. Желательно не использовать режимы OUT и IN OUT при написании функций, чтобы избежать побочных эффектов.

Тело подпрограммы должно содержать хотя бы один оператор (им может быть NULL). Для выхода из подпрограммы используется оператор RETURN [выражение]

Вызов подпрограммы может быть выполнен двумя способами:

-из другой подпрограммы или анонимного блока, например

DECLARE-- тела процедур BEGIN BirthdayPremium(20, 100); END;

-с помощью команды SQL* Plus EXECUTE

Хранимые подпрограммы Oracle предоставляет возможность хранить подпрограммы непосредственно в базе данных. Такие подпрограммы можно вызвать из других PS/SQL-блоков, из SQL-операторов, а также из клиентских приложений. Кроме того, подпрограммы хранятся в откомпилированном виде, что снижает время доступа к ним. Перед выполнением хранимой подпрограммы ORACLE устанавливает неявную точку сохранения. Если подпрограмма сбивается в результате необработанного исключения, ORACLE осуществляет откат к этой точке сохранения. Тем самым отменяется вся работа, проделанная подпрограммой.

Пакет – это набор программных объектов, хранимых в базе данных и использующих общие данные, курсоры и другие объекты. При ссылке на какой либо объект пакета он целиком загружается в память и становится доступным всем пользователям. Пакет состоит из двух частей: спецификации, или заголовка (package) и тела (package body). Спецификация пакета описывает его интерфейс, т.е., языковые конструкции, которые доступны всем пользователям пакета. Тело пакета полностью определяет курсоры и подпрограммы, тем самым реализуя спецификацию пакета. Кроме того, в тело пакета могут входить личные, или закрытые описания и подпрограммы, которые можно использовать только в подпрограммах, входящих в тело пакета. Модульность. Пакеты позволяют вам инкапсулировать логически связанные типы, объекты и подпрограммы в поименованный модуль PL/SQL. Каждый пакет легко понять, а интерфейсы между пакетами просты, ясны и хорошо определены. Это облегчает разработку приложений. Облегчение проектирования. Все, что надо изначально знать при проектировании приложения - это информация интерфейса для спецификации пакета. Вы можете кодировать и компилировать спецификацию пакета без его тела. Скрытие информации. Пакет скрывает определение личной подпрограммы, так что лишь этот пакет, а не использующие его приложения, будет затронут, если это определение изменится. Это упрощает сопровождение и развитие. Кроме того, скрывая детали реализации от пользователей, вы защищаете целостность вашей базы данных. Расширенная функциональность. Пакетированные общие переменные и курсоры продолжают существовать в течение всей сессии. Поэтому они могут совместно использоваться всеми процедурами, выполняющимися в данном окружении. Кроме того, через них можно передавать данные между транзакциями без необходимости записывать такие данные в базу данных. Улучшенная производительность. Когда вы вызываете пакетированную подпрограмму первый раз, в память загружается весь пакет. Поэтому последующие вызовы других подпрограмм этого пакета не требуют операций ввода-вывода.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]