April 12
I cursori sono una struttura fornita nelle versioni programmabili di Structured Query Language (SQL), come Sybase o Transact-SQL di Microsoft SQL Server. Definire un cursore per un'istruzione SELECT o un aggiornamento di SQL su una o più tabelle. Il cursore ha un nome che può essere utilizzato per riferirsi a, aprire e chiudere il cursore o recuperare le righe dal set del cursore. I cursori vengono utilizzati quando ogni riga del set ha bisogno di trattamento o dei suoi valori sono utilizzati in variabili del programma. Quando un nuovo cursore viene dichiarato nel ciclo che elabora ogni riga di un cursore, il nuovo cursore interno è nidificato all'interno del vecchio cursore esterno.
1 Dichiarare un cursore per una semplice istruzione SELECT utilizzando la seguente sintassi T-SQL:
DICHIARARE <nome-cursore cursore>
PER campo1 SELECT, campo2, field3
FROM <table-name>
DOVE Campo4 & lt; = @limitval
2 Aprire il cursore per l'elaborazione utilizzando questa sintassi T-SQL:
Apri <nome-cursore>
3 Recuperare le righe dal cursore aperto per l'elaborazione, in quanto è un cursore di lettura (selezione). Dichiarare le variabili necessarie per memorizzare i valori dei campi nella riga corrente del cursore. La sintassi T-SQL per il recupero file cursore è il seguente:
FETCH AVANTI DA <nome-cursore> IN @ var_fld1, @ var_fld2, @ var_fld3
mentre @@ FETCH_STATUS == 0
inizio
--- <Riga corrente del cursore processo qui>
FETCH AVANTI DA <nome-cursore> IN @ var_fld1, @ var_fld2, @ var_fld3
fine
4 Aggiungere la dichiarazione e l'esecuzione del secondo o interna del cursore nel ciclo recupero del cursore precedente o esterno come segue:
- Cursore esterno recuperare ciclo
mentre @@ FETCH_STATUS == 0
inizio
< process current row of outer cursor here >
- Tempo di dichiarare il cursore interno - nidificazione inizia
DICHIARARE inner_cursor CURSORE
FOR SELECT X, Y, Z, ....
FROM tabella1, tabella2, ...
WHERE <condizione>
inner_cursor APERTO
FETCH AVANTI DA inner_cursor IN @varX, @varY, @varZ ...
mentre @@ FETCH_STATUS == 0
iniziare - cursore interno recuperare ciclo
-- <process current inner_cursor row here>
- Ottenere riga successiva
FETCH AVANTI DA inner_cursor IN @varX, @varY, @varZ ...
end - cursore interno recuperare ciclo
end - cursore esterno recuperare ciclo