Archive

Posts Tagged ‘CURSOR’

Transact-SQL: utilizzo del CURSOR

February 4th, 2010 Nicola No comments

Una cosa molto banale, dichiarare ed usare un cursore in una store procedure in Transact-SQL:

Supponiamo di avere una tabella con tre campi: (ID, CAMPO1, CAMPO2)

DECLARE @ID INTEGER
DECLARE @CAMPO1 VARCHAR(10)
DECLARE @CAMPO2 VARCHAR(10)

DECLARE c_curs CURSOR FOR

select * from tabella

OPEN c_curs

FETCH NEXT FROM c_curs
INTO @ID, @CAMPO1, @CAMPO2

WHILE @@FETCH_STATUS = 0

BEGIN

-- Faccio qualche cosa con i record della tabella

-- Passo al record successivo
FETCH NEXT FROM c_curs
INTO @ID, @CAMPO1, @CAMPO2

END

CLOSE c_curs
DEALLOCATE c_curs

La documentazione di mamma Microsoft: http://msdn.microsoft.com/it-it/library/ms180169(SQL.90).aspx

Categories: SQL Server Tags: ,

Transact-SQL: scorrere la lista di cursori utilizzando sp_cursor_list

March 25th, 2009 Nicola No comments

Ecco un esempio della store procedure sp_cursor_list, che restituisce tutte le informazioni relative ai cursori allocati:

DECLARE C_PIPPO CURSOR KEYSET FOR SELECT * FROM VENDITE
OPEN C_PIPPO

DECLARE C_TOPOLINO CURSOR STATIC FOR SELECT * FROM VENDITE
OPEN C_TOPOLINO

DECLARE C_PAPERINO CURSOR DYNAMIC FOR SELECT * FROM VENDITE
OPEN C_PAPERINO

DECLARE C_PLUTO CURSOR FAST_FORWARD FOR SELECT * FROM VENDITE
OPEN C_PLUTO

DECLARE @CURSORI CURSOR

EXEC master.dbo.sp_cursor_list @cursor_return = @CURSORI OUTPUT, @cursor_scope = 2

FETCH NEXT from @CURSORI

WHILE (@@FETCH_STATUS <> -1)
BEGIN

FETCH NEXT from @CURSORI
END

CLOSE @CURSORI
DEALLOCATE @CURSORI

CLOSE C_PAPERINO
DEALLOCATE C_PAPERINO

CLOSE C_TOPOLINO
DEALLOCATE C_TOPOLINO

CLOSE C_PLUTO
DEALLOCATE C_PLUTO

CLOSE C_PIPPO
DEALLOCATE C_PIPPO

Il risultato:

reference_name cursor_name cursor_scope status model concurrency scrollable
open_status cursor_row fetch_status column_count row_count last_operation cursor_handle
C_PIPPO C_PIPPO 2 1 1 1 1
1 16 -9 4 0 1 180150003
C_TOPOLINO C_TOPOLINO 2 1 1 1 1
1 16 -9 4 0 1 180150005
C_PAPERINO C_PAPERINO 2 1 3 3 1
1 -1 -9 4 0 1 180150007
C_PLUTO C_PLUTO 2 1 4 1 0
1 -1 -9 4 0 1 180150009

Transact-SQL: la funzione CURSOR_STATUS

March 23rd, 2009 Nicola No comments

Indica lo stato del cursore (aperto, chiuso, chissà). Esempio:

SELECT 'STATO CURSORE INESISTENTE: ' + CONVERT(VARCHAR, CURSOR_STATUS('global','C_NICOLA'))
DECLARE C_NICOLA CURSOR KEYSET FOR SELECT * FROM VENDITE
SELECT 'STATO CURSORE ALLOCATO: ' + CONVERT(VARCHAR, CURSOR_STATUS('global','C_NICOLA'))
OPEN C_NICOLA
SELECT'STATO CURSORE APERTO: ' + CONVERT(VARCHAR, CURSOR_STATUS('global','C_NICOLA'))
CLOSE C_NICOLA
SELECT 'STATO CURSORE CHIUSO: ' + CONVERT(VARCHAR, CURSOR_STATUS('global','C_NICOLA'))
DEALLOCATE C_NICOLA

Risultato:

STATO CURSORE INESISTENTE: -3
STATO CURSORE ALLOCATO: -1
STATO CURSORE APERTO: 1
STATO CURSORE CHIUSO: -1

Mamma Microsoft: http://msdn.microsoft.com/en-us/library/ms177609.aspx