CURSORES EN SQL SERVER

Los cursores permiten tener el control fila por fila de un conjunto de registros.
¿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] CURSOR
FOR 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

2. Aperturar el cursor para que se active(OPEN)


OPEN nombreCursor

3. Recuperar las filas del cursor que desea visualizar


-- 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)


CLOSE nombreCursor

5. Liberar el cursor(DEALLOCATE)


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






Compartir

0 Comment to "CURSORES EN SQL SERVER"

Publicar un comentario