這是一個標量函數(shù),該函數(shù)允許存儲過程的調(diào)用方確定針對一個給定參數(shù),該過程是否返回游標和結(jié)果集。
CURSOR_STATUS
(
{ 'local' , 'cursor_name'
}
| { 'global' , 'cursor_name'
}
| { 'variable' , 'cursor_variable'
}
)
'local'
指定一個常量,該常量表明游標的源是一個本地游標名。
'cursor_name'
游標名。游標名必須符合標識符的規(guī)則。
'global'
指定一個常量,該常量表明游標的源是一個全局游標名。
'variable'
指定一個常量,該常量表明游標的源是一個本地變量。
'cursor_variable'
游標變量的名稱。必須使用 cursor 數(shù)據(jù)類型定義游標變量。
smallint
返回值 | 游標名 | 游標變量 |
---|---|---|
1 | 游標的結(jié)果集至少有一行,并且: 對于不感知游標和鍵集游標,結(jié)果集至少有一行。 對于動態(tài)游標,結(jié)果集可以有零行、一行或多行。 | 分配給該變量的游標已經(jīng)打開,并且: 對于不感知游標和鍵集游標,結(jié)果集至少有一行。 對于動態(tài)游標,結(jié)果集可以有零行、一行或多行。 |
0 | 游標的結(jié)果集為空。* | 分配給該變量的游標已經(jīng)打開,然而結(jié)果集肯定為空。* |
-1 | 游標被關閉。 | 分配給該變量的游標被關閉。 |
-2 | 不可用。 | 可以是: 先前調(diào)用的過程并沒有將游標指派給 OUTPUT 變量。 先前調(diào)用的過程給 OUTPUT 變量指派了游標,然而在過程結(jié)束時,游標處于關閉狀態(tài)。因此,游標被釋放,并且沒有返回給調(diào)用過程。 沒有將游標指派給已聲明的游標變量。 |
-3 | 帶有指定名稱的游標不存在。 | 帶有指定名稱的游標變量并不存在,或者即使存在這樣一個游標變量,但并沒有給它分配游標。 |
* 動態(tài)游標從不返回這個結(jié)果。
下面的示例創(chuàng)建一個名為 lake_list 的過程,并將執(zhí)行 lake_list 的輸出結(jié)果用作 CURSOR_STATUS 的檢驗。
說明 本示例依賴于一個名為 check_authority 的過程,該過程尚未創(chuàng)建。
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
相關文章