jueves, 23 de abril de 2009

Uso de cursores

Hace tiempo leí en un artículo una frase referente a cursores que me quedo grabada. "Todo lo que se pueda hacer con cursores se puede hacer con sql" y la verdad es ha sido mi guión a la hora de desarrollar nuevos procedimientos.

He de comentar que realmente he comprobado dicha frase, y es más también puedo decir que la diferencia entre usar cursores y es mucha, Sobre todo en cuanto a tiempo de proceso hablamos.

Pero menos rollo y vamos al tema:

  • Primero lo declaramos, le daremos un nombre (para el ejemplo lo llamares cr1) y prepararemos la select que usaremos para seleccionar la información que queremos. DECLARE CR1 CURSOR LOCAL FOR SELECT CAMPO1,CAMPO2 FROM TABLA
  • Fijaos que aunque usamos DECLARE, el nombre de la variable no lleva la arroba (@).
  • Deberemos declarar las variables que usaremos para almacenar el valor de los campos. DECLARE @CAMPO1, @CAMPO2 INT
  • Se declararan tantas variables como campos tengamos en la select.
  • Ya podemos abrir el cursor OPEN CR1
  • Y Movemos el cursor al primer registro, los valores los almacenaremos en las variables declaradas y el orden de los campos debe ser el mismo que en la select.
  • FETCH NEXT FROM RS INTO @CAMPO1, @CAMPO2
  • Ya podemos empezar el bucle de recorrido del cursor:

WHILE @@FETCH_STATUS = 0

BEGIN

PROCESOS ----

FETCH NEXT FROM CR1 INTO @CAMPO1, @CAMPO2

END

  • No se debe olvidar de cerrar el cursor (CLOSE CR1) y liberar de la memoria el cursor (DEALLOCATE CR1).

El tema de cursores se puede complicar más, por ejemplo el @@fetch_status puede tener diferentes valores y el cursor se puede mover adelante y atrás. Pero esto lo explicare en otro artículo. ;)

No hay comentarios:

Publicar un comentario