domingo, 3 de julio de 2016

Cursores Programación SQL

Para variar un poco, veremos algo de SQL, en este caso serán los cursores.

¿Qué es un cursor?
De forma sencilla podemos decir que es una especie de tipo de variable que se genera a partir de una select y cuyos datos son dinámicos, dependerán de los parámetros que se le pase.
Los cursores son similares a las estructuras, son tipos de datos que podemos crearlos, pero si no los usamos no servirán de nada.

Un ejemplo de declaración de un cursor es:
DECLARE MiCursor CURSOR  
    FOR SELECT campo2 FROM miTabla WHERE campo1 = @valorCampo1 

MiCursor: Es el nombre del nuevo tipo de datos
miTabla: es el nombre de la tabla que estamos consultando
campo1 y campo 2: son campos de la tabla miTabla
@valorCampo1: es el parámetro que se le pasa al cursos para poder obtener la información de forma dinámica

Si ningún programa utiliza el cursor MiCursor que hemos creado entonces será un tipo de datos inservible.
Para utilizarlo debemos recordar la lectura de ficheros, era como la lectura de un vinilo, el cursor es de la misma forma, el resultado de la select es un conjunto de registros en donde cada registro será similar a una linea leída en el fichero. De la misma forma forma como hacemos con un fichero, un cursor debe abrirse y cerrarse, para leer el registro primero nos posicionamos en él mediante la instrucción FETCH, luego de posicionarnos podemos leerlo.
El algoritmo sería el siguiente:
1. Inicializamos los parametros que necesite el cursor
2. Abrimos el cursor
3. Nos posicionamos en el primer registro
4. Leemos registro a registro hasta que lleguemos al último, en este caso el FETCH devolverá un estado de finalización.
5. Cerramos el cursor

Aplicamos el algoritmo al ejemplo:
@valorCampo1 = 1 --inicializamos el parámetro 
OPEN MiCursor --abrimos el cursor
FETCH NEXT FROM MiCursor INTO @registro --se posiciona en el primer registro, la variable @registro debe tener el mismo formato que campo2
WHILE @@FETCH_STATUS = 0  --lee hasta encontrar el estado de finalización
    BEGIN
        FETCH NEXT FROM MiCursor INTO @registro --lectura de siguiente registro
    END
CLOSE MiCursor --cierre de cursor

Para tener claro el funcionamiento de cursores es necesario tener claro el concepto de estructuras, de lectura de ficheros, y por supuesto de sentencias SQL y procedimientos.

No hay comentarios:

Publicar un comentario