CURSOR_STATUS (Transact-SQL)
Скалярная функция, позволяющая сущности, вызвавшей хранимую процедуру, определить, вернула ли процедура курсор и результирующий набор для конкретного аргумента.
Соглашения о синтаксисе в Transact-SQL
Синтаксис
CURSOR_STATUS
(
{ 'local' , 'cursor_name' }
| { 'global' , 'cursor_name' }
| { 'variable' , 'cursor_variable' }
)
Аргументы
- 'local'
Константа, показывающая, что источник курсора — это имя локального курсора.
- 'cursor_name'
Имя курсора. Имя курсора должно соответствовать требованиям, предъявляемым к идентификаторам.
- 'global'
Константа, показывающая, что источник курсора — это имя глобального курсора.
- 'variable'
Константа, показывающая, что источник курсора — это локальная переменная.
- 'cursor_variable'
Имя переменной курсора. Переменная курсора должна быть определена как тип данных cursor.
Тип возвращаемых данных
smallint
Возвращаемое значение | Имя курсора | Переменная курсора |
---|---|---|
1 |
Результирующий набор курсора включает как минимум одну строку. В случае статических и управляемых набором ключей курсоров результирующий набор включает как минимум одну строку. В случае динамических курсоров результирующий набор может включать одну или более строк или не включать их. |
Курсор, выделенный этой переменной, открыт. В случае статических и управляемых набором ключей курсоров результирующий набор включает как минимум одну строку. В случае динамических курсоров результирующий набор может включать одну или более строк или не включать их. |
0 |
Результирующий набор курсора пуст.* |
Курсор, выделенный этой переменной, открыт, но результирующий набор пуст.* |
-1 |
Курсор закрыт. |
Курсор, выделенный этой переменной, закрыт. |
-2 |
Не применимо. |
Возможны следующие варианты: ранее вызванная процедура не назначила этой переменной с аргументом OUTPUT никакой курсор; ранее вызванная процедура назначила этой переменной с аргументом OUTPUT курсор, но при завершении процедуры он находился в закрытом состоянии. Таким образом, курсор освобождается и не возвращается вызвавшей процедуре. Объявленной переменной курсора никакой курсор не назначен. |
-3 |
Курсор с указанным именем не существует. |
Переменная курсора с указанным именем не существует или существует, но ей еще не выделен курсор. |
*Динамические курсоры никогда не возвращают этот результат.
Примеры
В следующем примере создается процедура lake_list, и возвращаемые ею результаты используются для проверки статуса курсора.
Примечание. |
---|
Этот код зависит от процедуры check_authority, которая не была создана. |
IF EXISTS (SELECT name FROM sysobjects
WHERE name = 'lake_list' AND type = 'P')
DROP PROCEDURE lake_list
GO
CREATE PROCEDURE lake_list
( @region varchar(30),
@size integer,
@lake_list_cursor CURSOR VARYING OUTPUT )
AS
BEGIN
DECLARE @ok SMALLINT
EXECUTE check_authority @region, username, @ok OUTPUT
IF @ok = 1
BEGIN
SET @lake_list_cursor = CURSOR LOCAL SCROLL FOR
SELECT name, lat, long, size, boat_launch, cost
FROM lake_inventory
WHERE locale = @region AND area >= @size
ORDER BY name
OPEN @lake_list_cursor
END
END
DECLARE @my_lakes_cursor CURSOR
DECLARE @my_region char(30)
SET @my_region = 'Northern Ontario'
EXECUTE lake_list @my_region, 500, @my_lakes_cursor OUTPUT
IF Cursor_Status('variable', '@my_lakes_cursor') <= 0
BEGIN
/* Some code to tell the user that there is no list of
Lakes. */
END
ELSE
BEGIN
FETCH @my_lakes_cursor INTO -- Destination here
-- Continue with other code here.
END
См. также
Справочник
Функции работы с курсорами (Transact-SQL)
Типы данных (Transact-SQL)
Другие ресурсы
Использование идентификаторов в качестве имен объектов