Добавил:
rushevamar@mail.ru Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BD_Laboratornyi_774_praktikum.doc
Скачиваний:
28
Добавлен:
17.06.2021
Размер:
921.09 Кб
Скачать

Раздел II. Создание и работа с хранимыми (на сервере) процедурами.

Хранимые процедуры – это подпрограммы, хранящиеся в базах данных и представляющие собой один из видов их общих ресурсов.

Заголовок хранимой процедуры содержит название процедуры и, возможно, ее идентификационный номер, а также может включать в себя как входные параметры (передающие значения в процедуру), так и выходные параметры (завершающиеся служебным словом OUTPUT и возвращающие результат работы процедуры вызывающему программному объекту). Также можно использовать параметры, которые являются одновременно и входными и выходными. Кроме того, параметрам можно присваивать значения по умолчанию, которые могут быть только константами, но не выражениями, подлежащими вычислению.

Тело хранимой процедуры представляет собой последовательность SQL-команд, таких, например, как выборка данных (SELECT), их обновление (UPDATE) или удаление (DELETE), создание объектов базы данных, управление транзакциями, операторы цикла, условные операторы, вызовы других хранимых процедур и ряд других. Локальные переменные и локальные временные таблицы, которые создаются в теле процедуры, автоматически уничтожаются при выходе из нее, т.е. время их существования ограничено периодом исполнения команд, составляющих тело процедуры.

Процедуры вызываются командой EXEC[UTE] , в том числе из процедур, функций и других типов программных объектов. При вызове процедуры можно не указывать значения тех параметров, для которых заданы значения по умолчанию (можно также использовать зарезервированное слово DEDAULT). Однако при этом нужно придерживаться следующего правила: если значение какого-либо параметра не указывается (и нет слова DEDAULT), то значения последующих параметров нужно обязательно сопровождать указанием имен этих параметров (@parameter = value или @parameter = @variable). Такие поименованные параметры можно задавать в произвольном порядке.

Необходимость существования хранимых процедур диктуется тем, что не всякий результат можно получить с помощью одного запроса. Хранимые процедуры могут содержать большое число команд, а вызываться из клиентской программы всего одной строкой, что существенно снижает сетевой трафик. Кроме того, модификация хранимой процедуры приводит к тому, что сразу все клиентские приложения будут работать с новой редакцией процедуры.

Синтаксис команды создания хранимой процедуры (см. [1], стр. 1204):

CREATE PROC [ EDURE ] procedure_name [ ; number ]     [ { @parameter data_type }  [ VARYING ] [ = default ] [ OUTPUT ]     ] [ ,...n ] [ WITH  { RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ] [ FOR REPLICATION ] AS sql_statement [ ...n ]

Примеры хранимых процедур:

/* Выбор всех регионов Беларуси */

CREATE PROCEDURE pr_ДанныеРегионов;1

AS

SELECT *

FROM Регион

WHERE Страна = 'Беларусь'

GO

/* Проверка работы хранимой процедуры pr_ДанныеРегионов;1 */

EXEC pr_ДанныеРегионов;1

GO

/* Выбор всех регионов конкретной страны */

CREATE PROCEDURE pr_ДанныеРегионов;2

@Страна VARCHAR(20) = 'Беларусь'

AS

SELECT *

FROM Регион

WHERE Страна = @Страна

GO

/* Проверка работы хранимой процедуры pr_ДанныеРегионов;2 */

EXEC pr_ДанныеРегионов;2 -- выбираются регионы Беларуси

EXEC pr_ДанныеРегионов;2 'Россия' -- выбираются регионы России

EXEC pr_ДанныеРегионов;2 'Украина' -- выбираются регионы Украины

GO

/* Выбор регионов, связанных со страной и/или городом */

CREATE PROCEDURE pr_ДанныеРегионов;3

@Страна VARCHAR(20) = 'Беларусь',

@Город VARCHAR(20) = NULL

AS