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