I cursori sono delle strutture SQL che permettono sdi scorrere un set di dati
DECLARE Nome_Cursore CURSOR FAST_FORWARD FOR /*qui select*/
OPEN Nome_Cursore
FETCH NEXT FROM cur INTO /*variabili*/
WHILE @@fetch_status = 0
BEGIN
/*OPERAZIONI*/
FETCH NEXT FROM Nome_Cursore INTO /*variabili*/
END
CLOSE Nome_Cursore
DEALLOCATE Nome_Cursore
Prediamo in esame due tabelle:
Tabella Società
| Societa | Codice |
|---|---|
| Microsoft | 1 |
| Oracle | 2 |
| Sun | 3 |
| HP | 4 |
| MorpheusWeb | 5 |
Tabella Ordini
| NumeroOrdine | Importo | CodiceSocieta |
|---|---|---|
| 1001 | 100 | 1 |
| 1002 | 200 | 2 |
| 1003 | 50 | 3 |
| 1004 | 300 | 4 |
| 1005 | 80 | 1 |
| 1006 | 120 | 2 |
DECLARE @societa INT
DECLARE Nome_Cursore CURSOR FAST_FORWARD FOR
SELECT
CODICE
FROM SOCIETA
OPEN Nome_Cursore
FETCH NEXT FROM cur INTO @societa
WHILE @@fetch_status = 0
BEGIN
SELECT
NumeroOrdine, Importo
FROM Ordini
WHERE
CodiceSocieta = @societa
FETCH NEXT FROM Nome_Cursore INTO @societa
END
CLOSE Nome_Cursore
DEALLOCATE Nome_Cursore
Il risultato sarà il seguente
| NumeroOrdine | Importo |
|---|---|
| 1001 | 100 |
| 1005 | 80 |
| NumeroOrdine | Importo |
|---|---|
| 1002 | 200 |
| 1006 | 120 |
| NumeroOrdine | Importo |
|---|---|
| 1003 | 50 |
| NumeroOrdine | Importo |
|---|---|
| 1004 | 300 |
In pratica viene eseguito un set di istruzioni SQL per ogni record trovato nella query specificata nel cursore