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

37.. Хранимые процедуры базы данных. Операторы Transact-sql для создания, исполнения и модификации процедур. Пример создания и использования.

Хранимые процедуры представляют собой программы обработки данных на языке Transact SQL, записанные в БД и исполняемые на сервере по команде, поступившей от клиентского приложения, размещенного на рабочей станции.

Хранимые процедуры являются средством распределения вычислительной и обработки данных непосредственно на сервере

Хранимая процедура создается в контекстно установленной базе данных оператором USE<имя БД>

Поэтому при создании в имени процедуры не указывается имя сервера и имя базы данных

Исходные данные для процедуры:

объекты базы,

входные параметры (аргументы);

Результат процедуры:

изменения в БД,

возвращаемые наборы строк (таблиц, создаваемых оператором Select),

выходные параметры (скалярные значения)

Оператор создания и сохранения процедуры в БД имеет вид:

CREATE PROCEDURE [<схема>.]<имя процедуры> [;<№ верс>]

[@<имя форм.парам.><тип данных> [=<умалч. знач.>] [OUTPUT] ] [, . . . . . ]

[WITH [ RECOMPILE ] [, ENCRIPTION ] ]

AS

<операторы Transact SQL>

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Описание процедуры доступно через представление sys.procedures, а код в таблице SYSCOMMENTS

Пример создания хранимой процедуры, возвращающей набор строк

Процедура S_Title выводит названия книг ( поле Title) из таблицы Titles, относящиеся к определенному разделу знаний (поле type), задаваемому входным параметром:

CREATE PROCEDURE S_Title @t char(2)

AS

select title from titles

where

type Like '%' + RTRIM (@t) + '%‘

Встроенная функция RTRIM (@t) удаляет из параметра

@t остаточные пробелы

Задание. Создать процедуру, возвращающей количество и все сведения об авторах находящихся в том же городе,

что и автор с заданным au_id

Оператор, который выводит сведения об авторах:

Select * From authors where

city = (Select city From authors where au_id = @ID)

В процедуре необходимо предусмотреть параметры:

  1. @ID – входной параметр – au_id автора

  2. @count (типа Int) - выходной параметр. Для вывода числа авторов, живущих в том же городе, что и заданный автор

  3. Оператор, создания процедуры:

  4. create procedure ProcAuthorsCity

  5. @ID nvarchar(11), @count int output

  6. AS

  7. Begin

  8. Select * From authors where

  9. city = (Select city From authors where au_id = @ID)

  10. set @count = @@ROWCOUNT -- число строк, -- обработанных последним SQL оператором

  11. End

Для исполнения процедуры из файла скрипта или другой процедуры применяется оператор:

[ EXEC [ UTE ] ] [@<имя переменной>=]

[ [<сервер>.] <БД>.] <схема>.]<процедура> [; <№ версии>]

[@<имя факт. парам.>=] <знач. факт. парам.>] [OUTPUT]

[ , . . . ]

[WITH RECOMPILE]

Если в обращении к процедуре задано имя переменной, то ей будет присвоен возвращаемый статус процедуры

При обращении может использоваться как полное, так и сокращенное имя процедуры.

Если номер версии процедуры не задан, то по умолчанию исполняется процедура с номером 1.

Значение фактического параметра задается константой или переменной соответствующего типа.

Выходные параметры задаются переменной с опцией OUTPUT.

Опция WITH RECOMPILE требует перестроения плана процедуры перед данным выполнением

Вызов хранимой процедуры. Пример

Вызов процедуры S_Title, выводит названия книг ( поле Title) из таблицы Titles, относящиеся к определенному разделу знаний

-- @q - возвращаемый статус

-- @t - входной параметр

declare @q int

exec @q = S_Title @t = ‘busin‘ -- /* ключевая форма*/

-- т.к. @t char(2), то будет передан параметр ‘bu

-- или

exec @q = S_Title ‘busin'

-- при позиционной форме передачи параметров

select @q -- по умолчанию 0

Задание. Выполнить процедуру ProcAuthorsCity,

возвращающей количество и все сведения об авторах находящихся в том же городе, что и автор с заданным au_id

Declare @к int, @ReturnCode int

execute @ReturnCode = ProcAuthorsCity '274-80-9391', @к output -- факт. параметры

select @к As [К-во] , @ReturnCode As [Код возврата]

-- результат вызова

au_id au_lname au_fname phone

----------- ----------------------------------------

213-46-8915 Red Marjorie 415 986-7020 309

274-80-9391 Straight7 Dean 415 834-2919 5420

К-во Код возврата

----------- ------------

5 0

Сохранение набора строк, создаваемых хранимой процедурой

Для сохранение строк, создаваемых хранимой процедурой, в таблице БД используется оператор Insert – добавления строк в существующую таблицу:

INSERT  [ TOP (<выражение> ) [ PERCENT] ]

[INTO] <табл./представление> 

[(<список столбцов> ) ]  

{ VALUES ( { DEFAULT | NULL | <выражение>}[,…])  |

EXECUTE (<строковое выражение>) |

EXECUTE <имя хранимой процедуры> . . . . . .

Изменение хранимой процедуры

Для внесения изменений в текст процедуры :

    • оператором DROP удалить ее из БД, а затем повторно создать оператором CREATE PROCEDURE. При этом придется повторно задавать разрешения на исполнение.

    • Оператор ALTER PROCEDURE или редактор процедур в Management Studio

44

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