Выходные параметры позволяют возвратить из процедуры некоторый результат. Выходные параметры определяются с помощью ключевого слова OUTPUT. Например, определим еще одну процедуру:
1
2
3
4
5
6
7
8
| USE productsdb; GO CREATE PROCEDURE GetPriceStats @minPrice MONEY OUTPUT , @maxPrice MONEY OUTPUT AS SELECT @minPrice = MIN (Price), @maxPrice = MAX (Price) FROM Products |
При вызове процедуры для выходных параметров передаются переменные с ключевым словом OUTPUT:
1
2
3
4
5
6
7
| USE productsdb; DECLARE @minPrice MONEY, @maxPrice MONEY EXEC GetPriceStats @minPrice OUTPUT , @maxPrice OUTPUT PRINT 'Минимальная цена ' + CONVERT ( VARCHAR , @minPrice) PRINT 'Максимальная цена ' + CONVERT ( VARCHAR , @maxPrice) |
Также можно сочетать входные и выходные параметры. Например, определим процедуру, которая добавляет новую строку в таблицу и возвращает ее id:
1
2
3
4
5
6
7
8
9
10
11
12
13
| USE productsdb; GO CREATE PROCEDURE CreateProduct @ name NVARCHAR(20), @manufacturer NVARCHAR(20), @ count INT , @price MONEY, @id INT OUTPUT AS INSERT INTO Products(ProductName, Manufacturer, ProductCount, Price) VALUES (@ name , @manufacturer, @ count , @price) SET @id = @@IDENTITY |
С помощью глобальной переменной @@IDENTITY можно получить идентификатор добавленной записи.
При вызове этой процедуры ей также по позиции передаются все входные и выходные параметры:
1
2
3
4
5
6
7
| USE productsdb; DECLARE @id INT EXEC CreateProduct 'LG V30' , 'LG' , 3, 28000, @id OUTPUT PRINT @id |
Возвращение значения
Кроме передачи результата выполнения через выходные параметры хранимая процедура также может возвращать какое-либо значение с помощью оператора RETURN. Хотя данная возможность во многом нивелирована использованием выходных параметров, через которые можно возвращать результат, тем не менее, если надо возвратить из процедуры одно значение, то вполне можно использовать оператор RETURN.
Например, возвратим среднюю цену на товары:
1
2
3
4
5
6
7
| USE productsdb; GO CREATE PROCEDURE GetAvgPrice AS DECLARE @avgPrice MONEY SELECT @avgPrice = AVG (Price) FROM Products RETURN @avgPrice; |
После оператора RETURN указывается возвращаемое значение. В данном случае это значение переменной @avgPrice.
Вызовем данную процедуру:
1
2
3
4
5
6
| USE productsdb; DECLARE @result MONEY EXEC @result = GetAvgPrice PRINT @result |
Для получения результата процедуры ее значение сохраняется в переменную (в данном случае в переменную @result):
Комментариев нет:
Отправить комментарий