TIP [MS-SQL 2000] – Cursori
L’uso dei cursori nella scrittura di procedure è spesso un’attività da evitare il più possibile, considerando che l’implementazione dei cursori non è molto omogenea tra un DB Server e l’altro, di conseguenza potrebbe limitare la portabilità del vs sviluppo da un db ad un altro. Inoltre se un operazione è fattibile tramite istruzioni standard SQL è anche generalmete più efficiente dell’uso dei cursori. A volte tale attività si rende indispensabile e ciò implicherà che nel porting dell’applicazione su un’altro Db dovrete controllare di nuovo il codice relativo alla parte con i cursori.Nell’esempio che segue implementiamo una banale stored procedure per Ms-Sql Server che tramite l’ausilio di un cursore vi permetterà di effettuare delle operazioni riga per riga di un tabella.
/* CREAZIONE PROCEDURA */
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS
ON GO
CREATE proc <nome procedura> as DECLARE @variabile_1 ‘tipo_variabile’;
DECLARE @variabile_2 <tipo_variabile>
/* DEFINIZIONE/CREAZIONE CURSORE */
DECLARE <nome_cursore>
CURSOR FOR
SELECT <nome_campo1>,<nome_campo_n>
FROM <nome_tabella>
/* ATTIVAZIONE CURSORE CURSORE
OPEN <nome_cursore>
/* LETTURA DEI DATI TRAMITE CURSORE */
FETCH NEXT FROM
<nome_cursore> INTO @variabile_1,@variabile_n
WHILE @@FETCH_STATUS =0
/* @@FETCH_STATUS <– INTERNAL CONTROLLA LO STATO DEL CURSORE PER LA PROC IN ESECUZIONE */< /EM
>
BEGIN print ‘valore variabile “1” per la riga corrente : ‘ print @variabile_1 print ‘valore variabile “n” per la riga corrente : ‘
print @variabile_n
FETCH NEXT
FROM <nome_cursore> INTO @variabile_1,
@variabile_n
END
CLOSE <nome_cursore >DEALLOCATE <nome_cursore>
/* IMPORTANTE LIBERA MSSQL DAL CURSORE ALLOCATO*/
GO
SET QUOTED_IDENTIFIER OFF
GO
SET
ANSI_NULLS ON
GO
/* *************************** FINE CODICE ESEMPIO ********************* */