Россия, г. Санкт-Петербург |
Лекция 21: Создание хранимых процедур и управление этими процедурами
Использование RETURN
Вы можете возвращаться из любой точки хранимой процедуры в вызывающую программу с помощью ключевого слова RETURN, обеспечивающего безусловный выход из процедуры. RETURN можно также использовать для выхода из пакета или блока операторов. При выполнении оператора RETURN в хранимой процедуре работа процедуры прекращается в этой точке, и происходит переход к следующему оператору вызывающей программы. Операторы, следующие после RETURN в хранимой процедуре, не выполняются. С помощью RETURN вы можете также возвращать целое значение.
Сначала рассмотрим пример использования RETURN просто для выхода из хранимой процедуры. Мы создадим модифицированную версию процедуры GetUnitPrice, которая проверяет, было ли задано входное значение, и если нет, то выводит сообщение для пользователя и возвращается в вызывающую программу. Для этого мы определим входной параметр со значением по умолчанию NULL и затем будем проверять это значение в процедуре; если входной параметр имеет значение NULL, это означает, что входное значение не задано. Ниже приводится пример удаления и повторного создания этой процедуры:
USE Northwind GO IF EXISTS (SELECT name FROM sysobjects WHERE name = "GetUnitPrice" AND type = "P") DROP PROCEDURE GetUnitPrice GO CREATE PROCEDURE GetUnitPrice @prod_id int = NULL AS IF @prod_id IS NULL BEGIN PRINT "Please enter a product ID number" RETURN END ELSE BEGIN SELECT UnitPrice FROM Products WHERE ProductID = @prod_id END GO
А теперь запустим GetUnitPrice без ввода входного значения и посмотрим результаты. Для запуска этой хранимой процедуры вы должны указать оператор EXECUTE, поскольку вызов процедуры не является первым оператором этого пакета. Используйте следующую последовательность:
PRINT "Before procedure" EXECUTE GetUnitPrice PRINT "After procedure returns from stored procedure" GO
Результаты будут выведены в следующей форме:
Before procedure (До процедуры) Please enter a product ID number (Введите идентификационный номер продукта) After procedure returns from stored procedure (После возврата из хранимой процедуры)
Второй оператор PRINT включен для того, чтобы показать, что после оператора RETURN хранимой процедуры выполнение данного пакета продолжается с оператора PRINT.
Теперь рассмотрим использование RETURN для возврата значения в вызывающую программу. Возвращаемое значение должно быть целым. Это может быть константа или переменная. Вы должны объявить в вызывающей программе переменную, в которой будет храниться возвращаемое значение для дальнейшего использования в этой программе. Например, следующая процедура возвратит значение 1, если цена единицы продукции для продукта, указанного во входном параметре, меньше $100 ; иначе она возвратит значение 99.
CREATE PROCEDURE CheckUnitPrice @prod_id int AS IF (SELECT UnitPrice FROM Products WHERE ProductID = @prod_id) < 100 RETURN 1 ELSE RETURN 99 GO
Для вызова этой хранимой процедуры и использования возвращаемого значения объявите в вызывающей программе переменную и приравняйте ее возвращаемому значению хранимой процедуры (указав значение 66 в ProductID для входного параметра):
DECLARE @return_val int EXECUTE @return_val = CheckUnitPrice 66 IF (@return_val = 1) PRINT "Unit price is less than $100" GO
В результате будет выведен текст "Unit price is less than $100" (Цена единицы продукции меньше $100), поскольку цена единицы продукции для указанного продукта равна $17 и, тем самым, возвращаемое значение равно 1. Убедитесь в том, что вы задали целый тип данных, когда объявляете переменную, которая используется для хранения значения, возвращаемого оператором RETURN, поскольку этот оператор возвращает целое значение.