Professional Documents
Culture Documents
GRUPO #1
INTRODUCCIÓN, CONCEPTOS Y
DEFINICIONES BÁSICAS
• En SQL Server un cursor puede definirse como un elemento que representará a un
conjunto de datos determinado por una consulta T-SQL, el cursor permitirá recorrer
fila a fila, leer y eventualmente modificar dicho conjunto de resultados.
• SQL Server ofrecerá una amplia variedad de opciones y de funciones para crear y
operar sobre cursores. En este articulo, donde hemos utilizado SQL Server 2008
Enterprise Edition en los ejemplos, daremos un paseo por las posibilidades
disponibles.
• La creación y utilización de un cursor estará compuesta, como es de esperarse, por
una serie de instrucciones T-SQL, las cuales podrán separarse en grupos bien
diferenciados, los cuales son: Declaración, Apertura, Acceso a datos, Cierre y Desalojo,
a continuación detallaremos cada grupo de instrucciones.
CICLO DE VIDA DE UN CURSOR
• 1. Declarar el cursor
• 2. Abrir el cursor
• 3. Tomar cada fila
• 4. Cerrar el cursor
• 5. Desasignar el cursor
DECLARACIÓN
• El primer paso constará de la declaración del cursor, donde se indicarán (junto con el nombre
del cursor) la consulta que el mismo representará y algunas otras características bastante
interesantes.
• Como comentamos previamente, es posible en este paso definir algunas características del
comportamiento del cursor, por ejemplo la sentencia:
• Indicará que el cursor será de solo lectura, más adelante veremos en detalle las opciones
disponibles, por el momento nuestro objetivo es crear un cursor lo más simple posible.
APERTURA
• La apertura del cursor ejecutará la consulta definida en el paso previo y cargará los datos en el
mismo. La función OPEN de T-SQL permitirá efectuar esta tarea, para continuar con el ejemplo
previo la forma de abrir el cursor será la siguiente:
• OPEN ProdInfo
RECORRIDO DEL CURSOR Y ACCESO A
LOS DATOS
• Este paso constará de recorrer los resultados del cursor, la instrucción FETCH permitirá
efectuar dicha operación. Las filas leídas podrán copiarse a variables utilizando la sentencia
INTO en combinación con la sentencia FETCH, por ejemplo la sentencia:
• En el cierre del cursor se liberarán los registros tomados por el mismo. Una
vez que el cursor es cerrado ya no podrá recorrerse el conjunto de resultados
hasta que el mismo sea reabierto, la sentencia CLOSE cerrará un cursor
abierto y la sintaxis puede verse a continuación:
• CLOSE ProdInfo
DESALOJO DEL CURSOR
• DEALLOCATE ProdInfo
VARIABLES PARA EL MANEJO DE
CURSORES
• Se tiene una variable que retorna el número total de filas procesadas (@@rowcount)
• Se tiene una variable que indica el estado o resultado de mover el cursor (@@sqlstatus)
– Exitoso: se alcanzó una fila válida
– Hay un error al tratar de tomar la fila
– Ya se procesaron todas las filas
PRÁCTICAS RECOMENDADAS PARA
DESARROLLO
• Siempre especificar el modo del cursor en la sentencia declare.
• Como los cursores pueden demandar muchos recursos, evitar dejar abiertos los cursores por
mucho.
• Si se ejecuta la misma operación en cada fila del cursor, hay que buscar una alternativa.
EJEMPLO