Cursores (motor de base de datos)

Las operaciones de una base de datos relacional actúan en un conjunto completo de filas. El conjunto de filas que devuelve una instrucción SELECT está compuesto por todas las filas que satisfacen las condiciones de la cláusula WHERE de la instrucción. Este conjunto completo de filas que devuelve la instrucción se conoce como conjunto de resultados. Las aplicaciones, especialmente las aplicaciones interactivas en línea, no siempre trabajan de forma eficaz con el conjunto de resultados completo si lo toman como una unidad. Estas aplicaciones necesitan un mecanismo que trabaje con una fila o un pequeño bloque de filas cada vez. Los cursores son una extensión de los conjuntos de resultados que proporcionan dicho mecanismo.

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 secuencias de comandos, procedimientos almacenados y acceso de desencadenadores a los datos de un conjunto de resultados.

Solicitar un cursor

MicrosoftSQL Server admite dos métodos para solicitar un cursor:

  • Transact-SQL

    El lenguaje Transact-SQL admite una sintaxis para utilizar cursores modelada a partir de la sintaxis de cursores ISO.

  • Funciones de cursor para interfaces de programación de aplicaciones (API) de bases de datos

    SQL Server admite la funcionalidad de cursores de las siguientes API de bases de datos:

    • ADO (Microsoft ActiveX Data Object)

    • OLE DB

    • ODBC (Conectividad abierta de bases de datos)

Una aplicación nunca debe mezclar estos dos métodos de solicitud de cursores. Una aplicación que ya ha utilizado la API para determinar el comportamiento de cursores no debe ejecutar una instrucción DECLARE CURSOR de Transact-SQL para solicitar también un cursor Transact-SQL. Una aplicación sólo debe ejecutar DECLARE CURSOR si antes ha vuelto a establecer todos los atributos de cursores de la API a sus valores predeterminados.

Si no se ha solicitado un cursor Transact-SQL ni un cursor de la API, SQL Server devuelve de forma predeterminada un conjunto de resultados completo, conocido como conjunto de resultados predeterminado, a la aplicación.

Proceso de cursores

Si bien los cursores de Transact-SQL y los cursores de la API poseen una sintaxis diferente, se utiliza el siguiente proceso general con todos los cursores de SQL Server:

  1. Asigne un cursor al conjunto de resultados de una instrucción Transact-SQL y defina características del cursor como, por ejemplo, si sus filas se pueden actualizar.

  2. Ejecute la instrucción Transact-SQL para llenar el cursor.

  3. Recupere las filas del cursor que desea ver. La operación de recuperación de una fila o un bloque de filas de un cursor recibe el nombre de recuperación. La realización de una serie de recuperaciones para obtener filas, ya sea hacia adelante o hacia atrás, recibe el nombre de desplazamiento.

  4. Existe la opción de realizar operaciones de modificación (actualización o eliminación) en la fila de la posición actual del cursor.

  5. Cierre el cursor.