¿en que caso usamos cursores?, puesto que si ya tenemos acceso alas filas de una tabla uno a uno entonces podremos obtener dichos valores y controlarlos desde variables locales y así poder acumular valores, contarlos, aplicar quiebres, etc.
Consideraciones:
- Los cursores permiten situarse en filas específicas del conjunto de resultados.
- Recuperan una fila o un bloque de filas de la posición actual en el conjunto de resultados.
Proceso de implementación de un cursor
1. Declarar el cursor
DECLARE nombreCursor[INSENSITIVE][SCROLL] CURSORFOR expresionSelect[FOR READ ONLY | UPDATE[ OF column_name[,...n]]]
- UPDATE[ OF column_name[,...n]]: Define las columnas actualizables en el cursor. Si se especificar UPDATE in indicar una lista de columnas, se pueden actualizar todas las columnas.
-READ ONLY: (solo leer) evita que se efectúen actualizaciones a través de este cursor.
-SCROLL: Especifica que están disponibles todas las opciones de recuperación(FIRST, LAST, PRIOR, NEXT RALATIVE, ABSOLUTE). Si no se especifica SCROLL, la única opción de recuperación que se admite es NEXT
-INSENTIVE: Define un cursor que hace una copia temporar de los tados que utiliza. Este cursor no admite modificaciónes
OPEN nombreCursor
-- Lectura de la primera fila del cursor
FETCH[NOMBRE CURSOR]INTO[LISTA DE VARIABLES DECLARADAS]
WHILE(@@FETCH_STATUS= 0) BEGIN -- Lectura de la siguiente fila de un cursor
FETCH[NOMBRE CURSOR]INTO[LISTA DE VARIABLES DECLARADAS] ...
-- Fin del bucle WHILE
END
4. cerrar el cursor(CLOSE)FETCH[NOMBRE CURSOR]INTO[LISTA DE VARIABLES DECLARADAS]
WHILE(@@FETCH_STATUS= 0) BEGIN -- Lectura de la siguiente fila de un cursor
FETCH[NOMBRE CURSOR]INTO[LISTA DE VARIABLES DECLARADAS] ...
-- Fin del bucle WHILE
END
CLOSE nombreCursor
DEALLOCATE nombreCursor
EJEMPLO:
declare infoNotasPreRequisitos cursor read only for select n.nota1, n.nota2, n.nota3, n.nota4 from matricula m join alumno a on m.idAlumno=m.idAlumno join detalleMatricula dm on dm.idMatricula=m.idMatricula join curso c on dm.idCurso=c.idCurso join preRequisito pr on pr.idCurso=c.idCurso join nota n on n.idCurso=pr.curso where m.idMatricula=@idMatricula; open infoNotas FETCH NEXT FROM infoNotasPreRequisitos INTO @nota1,@nota2,@nota3,@nota4 WHILE @@fetch_status = 0 begin if @nota1<=10 and @nota2<=10 and @nota3<=10 and @nota4<=10 set @desaprobado=1 FETCH NEXT FROM infoNotasPreRequisitos INTO @nota1,@nota2,@nota3,@nota4 end close infoNotasPreRequisitos
0 Comment to "CURSORES EN SQL SERVER"
Publicar un comentario