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