¿Qué es un cursor?
Las operaciones de una base de datos relacional actúan en un conjunto completo de filas. El conjunto de filas devueltas por una instrucción SELECT consta de todas las filas que cumplen las condiciones de la cláusula WHERE de la instrucción . Este conjunto completo de filas devueltas por la instrucción se conoce como conjunto de resultados. Las aplicaciones, especialmente aquellas que son interactivas y en línea, no siempre pueden funcionar de forma eficaz con todo el conjunto de resultados como una unidad. Estas aplicaciones necesitan un mecanismo para trabajar con una fila o un pequeño bloque de filas a la vez. Los cursores son una extensión para los conjuntos de resultados que proporcionan ese mecanismo.
Un cursor es implementado por una biblioteca de cursores. Una biblioteca de cursores es software, que a menudo se implementa como parte de un sistema de base de datos o una API de acceso a datos, que se usa para administrar atributos de datos devueltos desde un origen de datos (un conjunto de resultados). Estos atributos incluyen la administración de simultaneidad, la posición en el conjunto de resultados, el número de filas devueltas y si puede avanzar o retroceder (o ambos) a través del conjunto de resultados (capacidad de desplazamiento).
Un cursor realiza un seguimiento de la posición del conjunto de resultados y permite realizar varias operaciones fila por fila en un conjunto de resultados, con o sin volver a la tabla original. En otras palabras, los cursores devuelven conceptualmente un conjunto de resultados basado en tablas de las bases de datos. El cursor se denomina así porque indica la posición actual en el conjunto de resultados, al igual que el cursor en una pantalla del equipo indica la posición actual.
Es importante familiarizarse con el concepto de cursores antes de pasar a aprender los detalles de su uso en ADO.
Con cursores, puede hacer lo siguiente:
Especifique el posicionamiento en filas específicas del conjunto de resultados.
Recupere una fila o un bloque de filas en función de la posición actual del conjunto de resultados.
Modifique los datos de las filas en la posición actual del conjunto de resultados.
Defina distintos niveles de sensibilidad a los cambios de datos realizados por otros usuarios.
Por ejemplo, considere una aplicación que muestre una lista de productos disponibles para un posible comprador. El comprador se desplaza por la lista para ver los detalles y el costo del producto y, por último, selecciona un producto para su compra. Se produce un desplazamiento y una selección adicionales para el resto de la lista. En lo que respecta al comprador, los productos aparecen de uno en uno, pero la aplicación usa un cursor desplazable para navegar hacia arriba y hacia abajo a través del conjunto de resultados.
Puede usar cursores de varias maneras:
Sin filas en absoluto.
Con algunas o todas las filas de una sola tabla.
Con algunas o todas las filas de tablas combinadas lógicamente.
Como de solo lectura o actualizables a nivel de cursor o campo.
Como solo avance o totalmente desplazable.
Con el conjunto de teclas de cursor ubicado en el servidor.
Sensibles a los cambios en las tablas subyacentes causados por otras aplicaciones (como membresía, ordenación, inserciones, actualizaciones y eliminaciones).
Existente en el servidor o en el cliente.
Los cursores de solo lectura ayudan a los usuarios a examinar el conjunto de resultados y los cursores de lectura y escritura pueden implementar actualizaciones de filas individuales. Los cursores complejos se pueden definir con conjuntos de claves que apuntan a filas de tabla base. Aunque algunos cursores son de solo lectura en una dirección de avance, otros pueden moverse hacia atrás y hacia delante y proporcionar una actualización dinámica del conjunto de resultados en función de los cambios que realizan otras aplicaciones en la base de datos.
No todas las aplicaciones necesitan usar cursores para acceder a los datos o actualizarlos. Algunas consultas simplemente no requieren la actualización directa de filas mediante un cursor. Los cursores deben ser una de las últimas técnicas que elija para recuperar datos y, a continuación, debe elegir el cursor de menor impacto posible. Cuando se crea un conjunto de resultados mediante un procedimiento almacenado, el conjunto de resultados no se puede actualizar mediante métodos de edición o actualización de cursores.
Concurrencia
En algunas aplicaciones multiusuario es muy importante que los datos presentados al usuario final sean lo más actuales posible. Un ejemplo clásico de este tipo de sistema es un sistema de reservas de aerolíneas, donde muchos usuarios podrían estar compitiendo por el mismo asiento en un vuelo determinado (y, por tanto, único registro). En un caso similar al siguiente, el diseño de la aplicación debe controlar las operaciones simultáneas en un único registro.
En otras aplicaciones, la simultaneidad no es tan importante. En tales casos, el gasto implicado en mantener los datos actualizados en todo momento no se puede justificar.
Posición
Un cursor también realiza un seguimiento de la posición actual en un conjunto de resultados. Piense en la posición del cursor como puntero al registro actual, similar a la forma en que un índice de matriz apunta al valor en esa ubicación concreta de la matriz.
Capacidad de desplazamiento
El tipo de cursor empleado por la aplicación también afecta a la capacidad de avanzar y retroceder por las filas de un conjunto de resultados; esto a veces se conoce como capacidad de desplazamiento. La capacidad de avanzar y hacia atrás a través de un conjunto de resultados agrega a la complejidad del cursor y, por tanto, es más caro implementar. Por este motivo, debe solicitar un cursor con esta funcionalidad solo cuando sea necesario.