Cursor Es
Cursor Es
•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.
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
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
• 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: