CURSOR_STATUS (Transact-SQL)
Funzione scalare che consente al chiamante di una stored procedure di determinare se la procedura ha restituito o meno un cursore e un set di risultati per un determinato parametro.
Convenzioni della sintassi Transact-SQL
Sintassi
CURSOR_STATUS
(
{ 'local' , 'cursor_name' }
| { 'global' , 'cursor_name' }
| { 'variable' , 'cursor_variable' }
)
Argomenti
'local'
Specifica una costante che indica che l'origine del cursore è un nome di cursore locale.
'cursor_name'
Nome del cursore. I nomi di cursore devono essere conformi alle regole per gli identificatori.
'global'
Specifica una costante che indica che l'origine del cursore è un nome di cursore globale.
'variable'
Specifica una costante che indica che l'origine del cursore è una variabile locale.
'cursor_variable'
Nome di una variabile cursore. Le variabili cursore devono essere definite utilizzando il tipo di dati cursor.
Tipi restituiti
smallint
Valore restituito | Nome cursore | Variabile cursore |
---|---|---|
1 |
Il set di risultati del cursore include almeno una riga. Nel caso di cursori INSENSITIVE e KEYSET, il set di risultati include almeno una riga. Nel caso di cursori dinamici, il set di risultati può includere una o più righe oppure nessuna riga. |
Il cursore allocato a questa variabile è aperto. Nel caso di cursori INSENSITIVE e KEYSET, il set di risultati include almeno una riga. Nel caso di cursori dinamici, il set di risultati può includere una o più righe oppure nessuna riga. |
0 |
Il set di risultati del cursore è vuoto.* |
Il cursore allocato a questa variabile è aperto, ma il set di risultati è vuoto.* |
-1 |
Il cursore è chiuso. |
Il cursore allocato a questa variabile è chiuso. |
-2 |
Non applicabile. |
I possibili valori sono i seguenti: Tramite la procedura chiamata in precedenza, a questa variabile di OUTPUT non è stato assegnato alcun cursore. Tramite la procedura chiamata in precedenza, a questa variabile di OUTPUT è stato assegnato un cursore, che tuttavia al completamento della procedura era chiuso. Il cursore viene pertanto deallocato e non viene restituito alla procedura chiamante. A una variabile cursore dichiarata non è assegnato alcun cursore. |
-3 |
Il cursore specificato non esiste. |
La variabile cursore specificata non esiste oppure esiste ma non è ancora stato allocato un cursore. |
* I cursori dinamici non restituiscono mai questo risultato.
Esempi
In questo esempio viene creata la procedura lake_list e l'output della procedura lake_list viene utilizzato come controllo di CURSOR_STATUS.
[!NOTA] Questo esempio dipende dalla procedura check_authority, che non è stata creata.
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
Vedere anche
Riferimento
Funzioni per i cursori (Transact-SQL)
Tipi di dati (Transact-SQL)
Altre risorse
Utilizzo degli identificatori come nomi di oggetti