Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие.doc
Скачиваний:
63
Добавлен:
14.05.2015
Размер:
1.51 Mб
Скачать

2.Создание хранимой процедуры

Для создания хранимой процедуры в среде SQL Server используется оператор CREATE PROCEDURE со сле­дующим синтаксисом:

CREATE PROCEDURE [владелец.] имя процедуры [;номер]

[(@ параметр 1 тип_данных[VARYING] [= значение по умолчанию] [OUTPUT] [,@ параметр 2]… [,@ параметр 1024])]

[{FOR REPLICATION} | {WITH RECOM­PILE}[{WITH] | [,]} ENСRYPTION]]

AS Операторы SQL

Слово PROCEDURE можно вводить полностью или со­кращать до PROC, например:

CREATE PROC usp_test

Имена хранимых процедур должны отвечать стандартам о наименовании объектов SQL Server. Максимальный размер имени процедуры - 128 символов. Можно создать локальную вре­менную хранимую процедуру, разместив # в начале имени про­цедуры. Локальной временной хранимой процедурой можно вос­пользоваться только в текущем сеансе работы, после завершения сеанса эта процедура удаляется. Добавив два символа ## в начале имени процедуры, можно создавать глобальную временную хра­нимую процедуру, которой могут воспользоваться все подклю­ченные в данный момент пользователи, она удаляется после по­следнего сеанса, в котором процедура была задействована.

Соглашение об именах хранимых процедур:

Тип1: usp _<имя_процедуры>

Например: usp_customer_inqury

usp – это user - defined store procedure – определяемая пользователем хранимая процедура.

Тип2: этот тип объединяет действие, выполняемое в хра­нимой процедуре, и ее имя, Например, имя процедуры, удаляю­щей информацию о покупателях del_customer. Если хранимая процедура выполняет несколько функций, используется син­таксис oth_<имя процедуры>.

INSERT ins_<имя процедуры>

SELECT sel_< имя процедуры >

UPDATE upd_< имя процедуры >

другие oth_< имя процедуры >

Вид < имя >­_ view, например, customer_ view

В синтаксисе хранимой процедуры элемент номер озна­чает необязательное целое число, которое можно использовать для группировки хранимых процедур под одним именем, чтобы их можно было удалять одним оператором.

Параметр означает возможность передачи в хранимую процедуру необходимых параметров, количество которых ≤1024. FOR REPLICATION отмечает данную хранимую про­цедуру как используемую только в процессах репликации. При использовании опции WITH RECOMPILE план запроса храни­мой процедуры не хранится в процедурном кэше. Вместо этого при каждом выполнении процедуры генерируется новый план запроса. Опции FOR REPLICATION и WITH RECOMPILE совместно использовать нельзя. Опцию WITH RECOMPILE следует использовать в следующих случаях:

1) при передаче в хранимую процедуру параметров, ко­торые по-разному распределяют данные, оптимизатор за­просов может создать различные планы запросов;

2) если передаются параметры в хранимую проце­дуру, но вас не устраивает время выполнения этой хранимой процедуры - можно вызвать перекомпиляцию этой хранимой процедуры при её следующем выполнении.

Опция WITH ENCRYPTION вызывает шифровку текста хранимой процедуры в таблице syscomments, чтобы пользова­тели не могли ознакомиться с содержимым процедуры. Эту оп­цию следует применять только в случае крайней необходимости.

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

Рассмотрим примеры создания простых хранимых процедур в базе данных pubs:

1) Создадим хранимую процедуру usp_show_authors, которая выбирает все столбцы и строки из таблицы authors:

CREATE PROCEDURE usp_show_authors

AS

SELECT * FROM authors

2) Создадим хранимую процедуру usp_Texas_Publisher, которая отбирает все имена из­дателей штата Техас из таблицы publishers и исполь­зует при этом опцию WITH ENCRYPTION:

CREATE PROC usp_Texas_Publisher WITH EN­CRIPTION

AS

SELECT pub_name

FROM publishers

WHERE state = ‘TX’

Хранимые процедуры создаются в той БД, в которой была выполнена команда CREATE PROCEDURE. Исключением являются временные хранимые процедуры, которые создаются в БД tempdb. Для запуска хранимой процедуры необходимо на­брать её имя в окне запросов программы Microsoft SQL Server Query Analyzer и щелкнуть на зеленой стрелке. Если же храни­мая процедура не является первым оператором в строке запроса, для её запуска используют оператор EXECUTE:

EXECUTE <имя процедуры>

или

EXEC <имя процедуры>.

При создании хранимых процедур можно использовать мастер хранимых процедур Stored Procedure Wizard – обычно используют для создания процедур вставки, удаления или обнов­ления данных. Мастер автоматически создает необходимые пе­ременные, которые входят в состав большинства хранимых про­цедур. Чтобы сделать хранимую процедуру более простой для эксплуатации в неё добавляют заголовок, например:

CREATE PROCEDURE usp_proc_name as

/*….

Имя процедуры

Описание:

Параметры:

Вызывается:

Другие результаты:

Пример: <пример вызова хранимой процедуры>

Обновления:

………*/

В SQL Server 2000 предусмотрена команда ALTER PROCEDURE, с помощью которой разработчик может модифицировать содержи­мое существующей хранимой процедуры. При использовании этой команды будут также сохранены любые права доступа (раз­решения на запуск), которые были назначены хранимой проце­дуре.

Синтаксис команды:

ALTER PROCEDURE [владелец.] имя_процедуры [;номер]

[(@ параметр1 тип данных [= значение_по_умолчанию] [OUTPUT] [,@ параметр2]…

[@ параметр 1024])] [{FOR REPLICATION } | { FOR

RECOMPILE} [{[WITH] | [,]}

ENCRYPTION]] AS Операторы SQL