Funciones de cursor

Funciones de Cursor

Las funciones de cursor devuelven información de los cursores. (Ver cursores)

Las funciones de cursor son las siguientes:
@CURSOR_ROWS
CURSOR_STATUS
@@FETCH_STATUS

Función @Cursor_rows
Devuelve el número de filas del cursor abierto.

Valor devuelto Descripción
-m El cursor se llena asincrónicamente. El valor –m es el número de filas actualmente en el conjunto de claves.
-1 El cursor es dinámico. Como los cursores dinámicos reflejan todos los cambios, el número de filas correspondientes al cursor cambia constantemente. Nunca se puede afirmar que se han recuperado todas las filas que correspondan.
0 No se han abierto cursores, no hay filas calificadas para el último cursor abierto, o éste se ha cerrado o su asignación se ha cancelado.
n El cursor está completamente relleno. El valor devuelto (n) es el número total de filas del cursor.

 

Ejemplos

Usando Northwind
use Northwind
go

— Crear un cursor con los productos de categoría 5
— Antes de declarar y abrir el cursor
select @@CURSOR_ROWS
go
Resultado: 0

Declare CursorProductosCategoria5 cursor for
select * from Products where CategoryID = 5
go
Open CursorProductosCategoria5
go
Después de abrir el cursor
select @@CURSOR_ROWS
go
Resultado: -1
Leer los datos del cursor
Fetch CursorProductosCategoria5
go
Cerrar y Liberar el cursor
Close CursorProductosCategoria5
Deallocate CursorProductosCategoria5
go
Función @@FETCH_STATUS
Devuelve el estado de la última instrucción que lee los datos del cursor (Fetch). El tipo de dato devuelto es Entero.

Valor devuelto Descripción
0 La instrucción FETCH se ejecutó correctamente y muestra registro.
-1 La instrucción FETCH no se ejecutó correctamente y no muestra registro.
-2 Falta la fila capturada.
-9 El cursor no está realizando una operación de búsqueda.

Generalmente @@Fetch_Status es usada con la estructura While para leer los registros del cursor.



Ejemplo
— Crear un cursor para mostrar los Empleados
Declare cursorEmpleados Cursor for
select E.EmployeeID As ‘Código’, Empleado = E.LastName + Space(1)+ E.FirstName from Employees As E order by Empleado
Open cursorEmpleados
Fetch from cursorEmpleados
Print ‘========= EMPLEADOS ============= ‘
While @@FETCH_STATUS = 0
Begin
Fetch from cursorEmpleados
End
Close cursorEmpleados
Deallocate cursorEmpleados
go

Función Cursor_Status
Permite determinar si el resultado de un procedimiento almacenado ha devuelto un cursor y un conjunto de resultados al recibir un parámetro.

Valor Descripción
-1 El cursor está cerrado.
1 El cursor tiene al menos una fila.
0 El conjunto de resultados del cursor está vacío.
-3 No existe un cursor con el nombre indicado.

 

Ejemplo

Crear un cursor con las categorías
Antes de Crear el cursor
select CURSOR_STATUS (‘global’,’cursorCategorias’) As ‘Antes de Crear’
go
Resultado: -3

Declare cursorCategorias cursor for Select C.CategoryID, C.CategoryName from Categories As C
go
Antes de abrir el cursor
select CURSOR_STATUS (‘global’,’cursorCategorias’) As ‘Antes de abrir’
go
Resultado: -1

Despues de abrir el cursor
Open cursorCategorias
go
select CURSOR_STATUS (‘global’,’cursorCategorias’) As ‘Antes de abrir’
go
Resultado: 1

Despues de Cerrar el cursor
Close cursorCategorias
go
select CURSOR_STATUS (‘global’,’cursorCategorias’) As ‘Antes de abrir’
go
Resultado: -1