CURSOR_STATUS
这是一个标量函数,该函数允许存储过程的调用方确定针对一个给定参数,该过程是否返回游标和结果集。
语法
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 的过程,并将执行 lake_list 的输出结果用作 CURSOR_STATUS 的检验。
说明 本示例依赖于一个名为 check_authority 的过程,该过程尚未创建。
USE pubs
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 for him/her */
END
ELSE
BEGIN
FETCH @my_lakes_cursor INTO -- Destination here
-- Continue with other code here.
END