0% encontró este documento útil (0 votos)
4 vistas13 páginas

Cursor Es

Cargado por

Dante Teran
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PPTX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
4 vistas13 páginas

Cursor Es

Cargado por

Dante Teran
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PPTX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 13

CURSORES

Dante Gabriel Teran Garate


¿QUÉ ES UN CURSOR?
• Los cursores en SQL Server pueden definirse como un elemento que representará a un
conjunto de datos determinado por una consulta T-SQL. Los cursores permiten
recorrer fila a fila, leer y eventualmente modificar dicho conjunto de resultados.
• Los cursores son un recurso más que ofrecen algunos SGBD como parte del set de
instrucciones que se pueden usar en procedimientos almacenados.
• Son de gran utilidad para el procesamiento registro a registro del resultado de una
consulta. El porque hacerlo mediante un cursor y no directamente sobre una consulta
depende fundamentalmente de la naturaleza del problema(no todo es solucionable en
una consulta), de las preferencias del desarrollador, de problemas de rendimiento, de
preferir un código mejor estructurado, etc...
CARACTERISTICAS:
Los cursores amplían el procesamiento de los resultados porque:

•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.

•ACEPTAN MODIFICACIONES DE LOS DATOS DE LAS FILAS EN LA POSICIÓN ACTUAL DEL CONJUNTO DE
RESULTADOS.

•ACEPTAN DIFERENTES GRADOS DE VISIBILIDAD PARA LOS CAMBIOS QUE REALIZAN OTROS USUARIOS EN
LA INFORMACIÓN DE LA BASE DE DATOS QUE SE PRESENTA EN EL CONJUNTO DE RESULTADOS.

•PROPORCIONAN INSTRUCCIONES TRANSACT-SQL EN SCRIPTS, PROCEDIMIENTOS ALMACENADOS Y


ACCESO DE DESENCADENADORES A LOS DATOS DE UN CONJUNTO DE RESULTADOS.
TIPOS DE CURSORES

STATIC: permiten
desplazarse hacia
KEYSET: cursor a medio
adelante y hacia atrás. DYNAMIC: A diferencia
camino entre un cursor
Estos cursores nunca de los estáticos, los FAST_FORWARD:
estático y dinámico. Este
reflejan los cambios en cursores dinámicos, cursor
tipo de cursores no siempre
las filas, mostrando reflejarán todas las FORWARD_ONLY,
detectarán cambios en la
siempre el conjunto de modificaciones READ_ONLY con
pertenencia y orden del
resultados igual al realizadas en las filas optimizaciones
conjunto de resultados, pero
momento de apertura del del conjunto de de rendimiento.
sí en los valores de las filas
cursor. resultados.
del mismo.
TIPOS DE BLOQUEO
READ ONLY: Solo •SCROLL_LOCKS:
•OPTIMISTIC: no bloquea
lectura, impidiendo bloquea las filas a
las filas a medida que se
que se realicen medida que se van
van leyendo en el cursor,
actualizaciones a leyendo en
impidiendo
través del cursor. Esta el cursor para asegurar
que UPDATES Y DELETE
opción elimina la la integridad de los
S tengan éxito si se realiza
capacidad datos y que
alguna actualización fuera
predeterminada de los UPDATES Y DEL
del cursor.
actualizar el cursor. ETES tengan éxito
PASO 1: Declaración de variables

El primer paso consiste en declarar las variables necesarias para rellenar con
los datos devueltos por el cursor. Recalcar, que el tipo de dato de la variable
tiene que ser compatible al tipo de dato del campo cuyo valor quiere
almacenar.
PASO 2: Declaración nombre del cursor y
SELECT

El siguiente paso consiste en declarar el nombre del cursor y la SELECT que ejecutará y
sobre la que iterará posteriormente para recorrer cada registro del conjunto de resultados.
De manera opcional, este paso está sujeto a la utilización de diversas opciones y
argumentos que definirán el cursor tal como hemos visto al principio de esta sección.
PASO 3: Apertura del cursor
PASO 4: Iteración de registros e inserción en variables

El siguiente paso consiste en la iteración de los registros


obtenidos en la consulta y la inserción de los datos
devueltos en las variables declaradas. El
funcionamiento del bucle es el siguiente:
•FETCH es un comando que coloca el cursor en una
posición. Una vez leído y procesado el primer
registro NEXT sitúa el cursor en la siguiente fila para
procesarla.
•Una vez se procesa el primer registro, si todo va bien
se rellenarán las variables con los valores devueltos por
la consulta mientras la
función FETCH_STATUS devolverá un 0, indicando
que la fila se ha procesado correctamente.
•Mientras FETCH_STATUS devuelva 0, se irá leyendo
y procesando cada registro en bucle hasta iterar la
última fila del conjunto de resultados.
PASO 5: Cierre del cursor

Una vez procesada la última fila, es necesario salir del cursor cerrándolo.
De está manera, no podrá recorrerse nuevamente el conjunto de resultados
hasta su nueva reapertura.
PASO 6: Des asignación del cursor

• El último paso consistirá


en la eliminación de la
definición del cursor y
la liberación de todos los
recursos del sistema
asociados al mismo,
eliminándolo de la
memoria.
CONCLUSIONES

• os cursores son una posibilidad potente y de fácil uso para acceder y modificar datos sobre
SQL Server, pero no debemos olvidar que son muy costosos en términos de performance, por
lo que cuando sea aplicable otro tipo de opción (como por ejemplo una variable tabla) la
misma será en el común de los casos una elección menos costosa. Por otra parte, cuando no
sea posible evitar el uso de cursores es importante recordar que los cursores READ_ONLY
serán la opción de bloqueo menos costosa y que un cursor FORWARD_ONLY será la mejor
opción de recorrido. Si tenemos la suerte de poder combinar ambas opciones (READ_ONLY
y FORWARD_ONLY) en un cursor FAST_FORWARD estaremos en el mejor de los casos.
• También es importante recordar que las opciones STATIC y KEYSET no son las más
deseables ya que copiarán datos (ya sea claves o filas enteras) a la tabla tmpdb y que el
bloqueo SCROLL_LOCKS es el menos popular, ya que comprometerá más la escalabilidad
que las otras opciones de bloqueo.
Referencias

• MICROSOFT:
• https://learn.microsoft.com/es-es/sql/relational-databases/cursors?view=sql-serv
er-ver16
• PROGRAMANDO A MEDIA NOCHE:
• https://www.programandoamedianoche.com/2009/11/cursores-en-sql-server/#:~:
text=Los%20cursores%20en%20SQL%20Server,modificar%20dicho%20conjunto%20de%
20resultados
.
• SQL LEARNING:
• https://sqlearning.com/es/elementos-lenguaje/cursores/
• DELETE SQL:

También podría gustarte