Опубликован: 11.12.2006 | Доступ: свободный | Студентов: 5363 / 282 | Оценка: 4.42 / 3.86 | Длительность: 57:15:00

Лекция 21: Создание хранимых процедур и управление этими процедурами

Использование SELECT для возвращаемых значений

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

Рассмотрим пару примеров. Сначала мы создадим новую хранимую процедуру с именем PrintUnitPrice, которая возвращает цену единицы продукции для продукта, указанного во входном параметре (с помощью идентификатора этого продукта). Используется следующая последовательность:

CREATE PROCEDURE PrintUnitPrice @prod_id int
AS
SELECT     ProductID,
             UnitPrice
FROM       Products
WHERE      ProductID = @prod_id
GO

Вызовите эту процедуру со значением входного параметра 66, как это показано ниже:

PrintUnitPrice 66
GO

Результаты будут выведены в следующей форме:

ProductID       UnitPrice
------------------------------------------
66                    17.00
(1 row(s) affected)

Для возврата значений переменных с помощью оператора SELECT, укажите после SELECT имя соответствующей переменной. В следующем примере мы снова создадим хранимую процедуру CheckUnitPrice, которая возвращает значение переменной, а также зададим заголовок выводимой колонки:

USE Northwind
GO  
 
IF EXISTS   (SELECT     name 
                 FROM       sysobjects 
                 WHERE      name = "CheckUnitPrice" AND 
                              type = "P")  
DROP PROCEDURE CheckUnitPrice 
GO 

CREATE PROCEDURE CheckUnitPrice @prod_id INT 
AS 
DECLARE @var1 int 
IF   (SELECT     UnitPrice 
      FROM       Products 
      WHERE      ProductID = @prod_id) > 100 
      SET          @var1 = 1 
ELSE 
      SET    @var1 = 99 
SELECT "Variable 1" = @var1 
PRINT "Can add more T-SQL statements here" 
GO

Вызовите эту процедуру со значением входного параметра 66, как это показано ниже:

CheckUnitPrice 66 
GO

Результаты выполнения этой хранимой процедуры будут выведены в следующей форме:

Variable   1 
--------------
           99 
 
(1 row(s) affected) 
 
Can add more T-SQL statements here

Мы вывели текст оператора PRINT "Can add more T-SQL statements here" (Здесь можно добавить другие операторы T-SQL), чтобы показать отличие между возвратом значения с помощью SELECT и возвратом значения с помощью RETURN. Оператор RETURN прекращает работу хранимой процедуры в том месте, где он находится, а оператор SELECT возвращает свой результирующий набор, после чего продолжается выполнение хранимой процедуры.

Если бы в этом примере мы не задали заголовок колонки (просто указали бы SELECT @var1 ), то получили бы результат без заголовка, как это показано ниже:

--------------
99
 
(1 row(s) affected)
Константин Дементьев
Константин Дементьев
Россия, г. Мичуринск