CURSOR_STATUS (Transact-SQL)
指定されたパラメータでプロシージャがカーソルと結果セットを返したかどうかを、ストアド プロシージャの呼び出し元が判断するためのスカラ関数です。
構文
CURSOR_STATUS
(
{ 'local' , 'cursor_name' }
| { 'global' , 'cursor_name' }
| { 'variable' , 'cursor_variable' }
)
引数
'local'
カーソルのソースがローカル カーソル名であることを示す定数です。
'cursor_name'
カーソルの名前です。カーソル名は、識別子の規則に従っている必要があります。
'global'
カーソルのソースがグローバル カーソル名であることを示す定数です。
'variable'
カーソルのソースがローカル変数であることを示す定数です。
'cursor_variable'
カーソル変数の名前です。カーソル変数は、cursor 型を使用して定義する必要があります。
戻り値の型
smallint
戻り値 | カーソル名 | カーソル変数 |
---|---|---|
1 |
カーソルの結果セットは 1 つ以上の行で構成されます。 状態非依存のキーセット カーソルの場合、結果セットは 1 つ以上の行で構成されます。 動的カーソルの場合、結果セットは 0、1、または複数の行で構成されます。 |
この変数に割り当てられているカーソルはオープンしています。 状態非依存のキーセット カーソルの場合、結果セットは 1 つ以上の行で構成されます。 動的カーソルの場合、結果セットは 0、1、または複数の行で構成されます。 |
0 |
カーソルの結果セットは空です。* |
この変数に割り当てられているカーソルはオープンしていますが、結果セットは完全に空です。* |
-1 |
カーソルはクローズしています。 |
この変数に割り当てられているカーソルはクローズしています。 |
-2 |
適用なし。 |
次の値をとります。 以前に呼び出されたプロシージャによって、この OUTPUT 変数にカーソルは割り当てられませんでした。 以前に呼び出されたプロシージャによって、この OUTPUT 変数にカーソルが割り当てられましたが、プロシージャの終了時点ではカーソルはクローズした状態でした。このため、カーソルの割り当てが解除され、呼び出し元のプロシージャに返されません。 宣言されたカーソル変数にはカーソルが割り当てられていません。 |
-3 |
指定された名前のカーソルは存在しません。 |
指定された名前のカーソル変数は存在しません。または、存在してもカーソルがまだ割り当てられていません。 |
* 動的カーソルがこのような結果を返すことはありません。
例
この例では、lake_list という名前のプロシージャを作成し、lake_list を実行して得られる出力を CURSOR_STATUS の確認として使用します。
メモ : |
---|
この例では、まだ作成されていない 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)