Inicio > Programación con T-SQL > Cursores en SQL Server

Cursores en SQL Server

 
CURSORES
Un cursor es una estructura de datos
creada en memoria RAM producto de una sentencia SELECT y que nos permite navegar
dentro de las filas para obtener la información.
Cuando trabajemos con cursores debemos
seguir los siguientes pasos.

-Declarar el cursor, utilizando DECLARE 

-Abrir el cursor, utilizando OPEN 

-Leer los datos del cursor, utilizando FETCH
INTO
 

-Cerrar el cursor, utilizando CLOSE

-Liberar el cursor, utilizando DEALLOCATE

use northwind
go
–Declarando el cursor
Declare Cursor1 Cursor scroll
   for select * from dbo.customers
–Abrir el cursor
Open Cursor1
–Navegar
Fetch first from Cursor1
–cerrar el cursor
Close Cursor1
–liberar de memoria
Deallocate Cursor1
 
    La sintaxis
general para trabajar con un cursor es la siguiente.
— Declaración del cursor

DECLARE [NOMBRE CURSOR] CURSOR [ LOCAL | GLOBAL ]

[ FORWARD_ONLY | SCROLL ]

FOR [SENTENCIA DE SQL (SELECT)]

 — Apertura del cursor

OPEN [NOMBRE CURSOR]

 — Lectura de la primera fila del cursor

FETCH [NOMBRE CURSOR] INTO [LISTA DE VARIABLES DECLARADAS]

WHILE (@@FETCH_STATUS = 0)

BEGIN   

— Lectura de la siguiente fila de un
cursor

FETCH [NOMBRE CURSOR] INTO [LISTA DE VARIABLES DECLARADAS]

— Fin del bucle WHILE

END

— Cierra el cursor

CLOSE [NOMBRE CURSOR]

— Libera los recursos del cursor

DEALLOCATE [NOMBRE CURSOR]

 
    El siguiente ejemplo
muestra un ejemplo de cursor usando la base de datos northwind.
 
—-Ejemplo 2
Cursores
Declare @codigo varchar(5),
@compania varchar(200),
@contacto varchar(150),
@pais varchar(100)
Declare ccustomers cursor GLOBAL
     for Select customerid, companyname, contactname
     , country from customers
Open ccustomers
fetch ccustomers into @codigo, @compania, @contacto,
@pais
while(@@fetch_status=0)
begin
print @codigo +‘ ‘+ @compania +‘ ‘+ @contacto +‘ ‘+@pais
fetch ccustomers into @codigo, @compania, @contacto,
@pais
end
close ccustomers
deallocate ccustomers
 
GO
Cuando trabajamos con cursores, la función
@@FETCH_STATUS nos indica el estado de la última instrucción
FETCH emitida, los valores posibles son:
Valor devuelto
Descripción
0
La instrucción FETCH se ejecutó correctamente.
-1
La instrucción FETCH no se ejecutó correctamente o la fila estaba más
allá del conjunto de resultados.
-2
Falta la fila recuperada.
 
 
Para actualizar los datos de un cursor debemos
especificar FOR UPDATE después de la sentencia SELECT en la declaración del
cursor, y WHERE CURRENT OF [Nombre Cursor] en la sentencia UPDATE tal y
como muestra el siguiente ejemplo.
—-Ejemplo 3
Cursores Actualizar datos
Declare @codigo
varchar(5),
@compania varchar(200),
@contacto varchar(150),
@pais varchar(100)
Declare ccustomers
cursor GLOBAL
     for Select
customerid,
companyname,
contactname
     , country
from customers
FOR UPDATE
Open ccustomers
fetch ccustomers
into @codigo, @compania, @contacto,
@pais
while(@@fetch_status=0)
begin
UPDATE customers
set companyname
= @compania
+ ‘(Modificado)’
where current of ccustomers
 
fetch ccustomers
into @codigo, @compania, @contacto,
@pais
end
close ccustomers
deallocate ccustomers
go
 
 En la apertura del cursor, podemos especificar los
siguientes parámetros:

DECLARE



<nombre_cursor> CURSOR  [ LOCAL | GLOBAL ]
[ FORWARD_ONLY |
SCROLL ]

[ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ]

[ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ]

[ TYPE_WARNING ]

FOR  Sentencia_sql
 Para consultar cada parámetro el link es:
 
 
Anuncios
  1. Neiro Culma
    agosto 1, 2016 en 2:39 pm

    Muy bien explicado, gracias!

  1. No trackbacks yet.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

w

Conectando a %s

A %d blogueros les gusta esto: