Создание хранимой процедуры
Как и большинство объектов баз данных SQL Server, хранимую процедуру можно создать тремя способами: - с помощью средств Transact-SQL; - с помощью Enterprise Manager; - с помощью мастера Create Stored Procedure Wizard. Мы будем рассматривать создание хранимых процедур только средствами Transact-SQL, точнее, с помощью команды CREATE PROCEDURE. Рассмотрим синтаксис этой команды: CREATE PROCEDURE procedure_name [: number ] [ { @parameter data_type } [ VARYING ] [ = default ] [.OUTPUT ] WITH { RECOMPILE|ENCRYPTION|RECOMPILE. ENCRYPTION } ] [ FOR REPLICATION ] AS sql_statement. Указание только префикса sp_ еще не делает процедуру системной. Чтобы быть таковой, она должна быть размещена в системной базе данных master. После этого ее можно будет использовать в контексте любой базы данных, не указывая полного имени. Рассмотрим параметры, используемые при создании хранимой процедуры. - procedure_name – имя создаваемой процедуры. Используя префиксы sp_, # и ##, можно определить создаваемую процедуру соответственно как системную или временную. Как видно из синтаксиса команды, не допускается указывать имя владельца, которому будет принадлежать создаваемая процедура, а также имя базы данных, в которой должна быть размещена процедура. Таким образом, чтобы разместить создаваемую хранимую процедуру в конкретной базе данных, необходимо выполнять команду CREATE PROCEDURE в контексте этой базы данных. Напомним, что переключить текущую базу данных можно с помощью команды USE. При обращении из тела хранимой процедуры к объектам той базы данных, в которой расположена процедура, можно использовать укороченные имена, то есть без указания имени базы данных. Когда же требуется обратиться к объектам, расположенным в других базах данных, то указание имени базы данных обязательно.
- number – идентификационный номер хранимой процедуры, однозначно определяющий ее в группе процедур. - @parameter – имя параметра, который будет использоваться создаваемой хранимой процедурой для передачи входных или выходных данных. Как и при работе с локальными переменными, имена параметров хранимой процедуры должны начинаться с символа @. В одной хранимой процедуре можно использовать множество параметров (до 1024). Для этого достаточно разделить их запятыми. Параметры, определяемые при создании хранимой процедуры, являются своего рода локальными переменными, поэтому различные хранимые процедуры могут иметь абсолютно идентичные параметры. Однако, в хранимой процедуре не разрешается использование переменных с именами, совпадающими с именами параметров. - data_type – тип данных, который будет иметь соответствующий параметр хранимой процедуры. Для определения параметров можно использовать любые типы данных SQL Server, включая text, ntext и image, а также пользовательские типы данных. - OUTPUT – наличие этого ключевого слова будет означать, что соответствующий параметр предназначается для возвращения данных из хранимой процедуры. Однако это вовсе не означает, что параметр не может быть использован для передачи значений в хранимую процедуру. Указание ключевого слова OUTPUT предписывает серверу при выходе из хранимой процедуры присвоить текущее значение параметра локальной переменной, которая была указана при вызове процедуры в качестве значения параметра. Отметим, что при наличии ключевого слова OUTPUT значение соответствующего параметра при вызове процедуры может быть задано только с помощью локальной переменной. Не разрешается использование любых выражений или констант, допустимое для обычных параметров. - VARYING – ключевое слово, которое используется совместно с параметром OUTPUT, имеющим тип данных cursor. Ключевое слово VARYING определяет, что в качестве выходного параметра будет представлено результирующее множество.
- default – значение, которое будет принимать соответствующий параметр по умолчанию. Таким образом, при вызове процедуры можно будет не указывать явно значение соответствующего параметра. В этом случае будет использовано значение, заданное с помощью параметра default. - RECOMPILE – как мы говорили в начале урока, сервер кэширует план исполнения запроса и компилированный код. Так что при последующем вызове процедуры будут использоваться уже готовые значения. Однако в некоторых случаях все же требуется выполнять перекомпиляцию кода процедуры. Указание данного ключевого слова предписывает системе создавать план выполнения хранимой процедуры при каждом ее вызове. - FOR REPLICATION – это ключевое слово используется при репликации данных и включении создаваемой хранимой процедуры в качестве статьи в публикацию. Когда процедура, созданная с параметром FOR REPLICATION, копируется механизмами репликации на подписчиков, она не может быть выполнена стандартными средствами. Ее вызов осуществляется только подсистемой репликации. Параметр FOR REPLICATION не может быть использован совместно с параметром RECOMPILE. - ENCRYPTON – использование этого ключевого слова при создании хранимой процедуры предписывает серверу выполнить кодирование кода хранимой процедуры. Эта возможность позволяет обеспечить защиту от плагиата авторских алгоритмов, реализованных в работе хранимой процедуры. - AS – это ключевое слово свидетельствует о начале собственно тела хранимой процедуры, то есть набора команд Transact-SQL, с помощью которых и будет реализовываться то или иное действие. В теле процедуры могут использоваться практически все команды Transact-SQL, объявляться транзакции, устанавливаться блокировки и производиться вызовы других хранимых процедур. Для выхода из хранимой процедуры можно использовать команду RETURN. Рассмотрим пример создания хранимой процедуры, возвращающей в переменной @i среднюю длину имени студента: Пример 4. CREATE PROCEDURE SimpleMine1 AS SELECT StName, StSurname, Birth from Grooup Это пример простой хранимой процедуры. Пример 5. CREATE PROCEDURE SimpleMine2 @x char(50)= ‘Вася’ AS SELECT StName, StSurname FROM GROOUP WHERE StName=@x.
Это пример хранимой процедуры со значением по умолчанию.
Пример 6. CREATE PROCEDURE SimpleMine3 @x char(50) AS SELECT StName, StSurname FROM GROOUP WHERE StName=@x. Создаем хранимую процедуру с входным параметром.
Пример 7. CREATE PROCEDURE SimpleMine4 @x char(50)output AS set @x='МИРУ МИР'. Создаем хранимую процедуру с выходным параметром. Пример 8. CREATE PROCEDURE ErrorSP AS DECLARE @returnCode int SELECT StName,StSurname from Grooup SET @returnCode=@@ERROR RETURN(@returnCode). Вызов хранимой процедуры После того как процедура была создана, ее можно запускать. В SQL Server в распоряжении пользователя имеются два способа выполнения хранимой процедуры: - указание только имени процедуры; - использование команды EXECUTE. Первый вариант используется, когда вызов хранимой процедуры является единственной командой передаваемого на исполнение пакета. Однако когда вызов хранимой процедуры не является единственной командой в пакете, то требуется обязательное указание команды EXECUTE. Более того, указание этой команды требуется и при вызове процедуры из тела другой процедуры. Упрощенный синтаксис команды EXECUTE следующий: EXEC procedure_name [ [ @parameter = ] { value | @variable [ OUTPUT ] | [ DEFAULT ] ] [,...n ]. Указывая ключевое слово OUTPUT, вы тем самым предписываете присвоить соответствующей локальной переменной (внешней по отношению к процедуре) при завершении хранимой процедуры значение соответствующего параметра. Отметим, что значения параметров могут свободно изменяться в ходе работы процедуры. Использование слова OUTPUT при вызове процедуры разрешается только для параметров, которые были объявлены при создании процедуры с ключевым словом OUTPUT. Когда при вызове процедуры для параметра указывается ключевое слово DEFAULT, то для этого параметра будет использовано значение по умолчанию. Естественно, указание слова DEFAULT разрешается только для тех параметров, для которых определено значение по умолчанию. Рассмотрим примеры: Пример 9. Для выполнения процедуры из первого примера: EXECUTE SimpleMine1 Точно также и в примере 5, процедура SimpleMine2. Пример 10. Чтобы выполнить процедуру SimpleMine3 введите: EXECUTE SimpleMine3 ‘Вася’ Пример 11. DECLARE @myOutput char(6) EXECUTE SimpleMine4 @myOutput OUTPUT SELECT @myOutput.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|