2. Cursores
Es un elemento que representará a un conjunto de datos determinado por una
consulta T-SQL, el cursor permitirá recorrer fila a fila, leer y eventualmente
modificar dicho conjunto de resultados.
Las operaciones de una base de datos relacional actúan en un conjunto completo
de filas. Por ejemplo, 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.
3. Sintaxis
DECLARE cursor_name [ INSENSITIVE ] [ SCROLL ] CURSOR
FOR select_statement
[ FOR { READ ONLY | UPDATE [ OF column_name [ ,...n ] ] } ]
[;]
Transact-SQL Extended Syntax
DECLARE cursor_name CURSOR [ LOCAL | GLOBAL ]
[ FORWARD_ONLY | SCROLL ]
[ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ]
[ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ]
[ TYPE_WARNING ]
FOR select_statement
[ FOR UPDATE [ OF column_name [ ,...n ] ] ]
[;]
4. Administración de Procedimientos Almacenados (Creación,
Modificación y Eliminación)
Declaracion de variables para el cursor
DECLARE @Id int,
@Nombre varchar(255),
@Apellido1 varchar(255),
@Apellido2 varchar(255),
@NifCif varchar(20),
@FxNacimiento datetime
CREACIÓN
5. Declaración del cursor
DECLARE cClientes CURSOR FOR
SELECT Id, Nombre, Apellido1,
Apellido2, NifCif, FxNacimiento
FROM CLIENTES
Apertura del cursor
OPEN cClientes
6. Lectura de la primera fila del cursor
FETCH cClientes INTO @id, @Nombre,
@Apellido1,
@Apellido2, @NifCif,
@FxNacimiento
WHILE (@@FETCH_STATUS = 0 )
BEGIN
PRINT @Nombre + ' ' + @Apellido1 + ' ' + @Apellido2
7. Lectura de la siguiente fila del cursor
FETCH cClientes INTO @id, @Nombre,
@Apellido1,
@Apellido2, @NifCif, @FxNacimiento
END
-- Cierre del cursor
CLOSE cClientes
-- Liberar los recursos
DEALLOCATE cClientes
8. MODIFICACIÓN
Declaracion de variables para el cursor
DECLARE @Id int,
@Nombre varchar(255),
@Apellido1 varchar(255),
@Apellido2 varchar(255),
@NifCif varchar(20),
@FxNacimiento datetime
9. Declaración del cursor
DECLARE cClientes CURSOR FOR
SELECT Id, Nombre, Apellido1,
Apellido2, NifCif, FxNacimiento
FROM CLIENTES
FOR UPDATE
ELIMINACIÓN
Delete Employer_Cursor
10. Ejemplos
Abrir un cursor y recorrelo
DECLARE Employee_Cursor CURSOR FOR
SELECT LastName, FirstName
FROM Northwind.dbo.Employees
WHERE LastName like 'B%'
OPEN Employee_Cursor
FETCH NEXT FROM Employee_Cursor
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT FROM Employee_Cursor
END
CLOSE Employee_Cursor
DEALLOCATE Employee_Cursor
11. Abrir un cursor e imprimir su contenido
SET NOCOUNT ON
DECLARE
@au_id varchar(11),
@au_fname varchar(20),
@au_lname varchar(40),
@message varchar(80),
@title varchar(80)
PRINT "-------- Utah Authors report --------"
12. Recorrer un cursor
USE pubs
GO
DECLARE authors_cursor CURSOR FOR
SELECT au_lname
FROM authors
WHERE au_lname LIKE "B%"
ORDER BY au_lname
OPEN authors_cursor
FETCH NEXT FROM authors_cursor
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT FROM authors_cursor
END
CLOSE authors_cursor
DEALLOCATE authors_cursor
13. Resumen
Cursores Un cursor permite acceder un resultado (result set), una fila (registro) a la
vez. Debido a su orientación en filas, los cursores a menudo son utilizados en
ciclos (loops) que localizan y procesan una fila dentro de cada iteración del ciclo.
La implementación del cursor en MySQL tiene las siguientes propiedades: este es
proporcionado para cursores de solo lectura (read-only); no pueden ser utilizados
para modificar tablas. Los cursores solo avanzan a través de un resultado fila por
fila; no permiten ir hacia atrás y luego hacia delatante libremente.