Con la ferviente creencia que es vital en nuestro día a día el conocimiento informático hace más eficiente a las personas y sus procesos corporativos, se creó este blog que es un aporte a la comunidad hispanoamericana, que busca material técnico y practico en español.
viernes, 12 de octubre de 2012
Manejo de Cursores en Microsoft 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
usenorthwind
go
--Declarando el cursor
DeclareCursor1Cursorscroll
forselect*fromdbo.customers
--Abrir el cursor
OpenCursor1
--Navegar
FetchfirstfromCursor1
--cerrar el cursor
CloseCursor1
--liberar de memoria
DeallocateCursor1
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.
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@codigovarchar(5),
@companiavarchar(200),
@contactovarchar(150),
@paisvarchar(100)
DeclareccustomerscursorGLOBAL
forSelectcustomerid,companyname,contactname
,countryfromcustomersFORUPDATE
Openccustomers
fetchccustomersinto@codigo,@compania,@contacto,
@pais
while(@@fetch_status=0)
begin
UPDATEcustomers
setcompanyname=@compania+'(Modificado)'
wherecurrentofccustomers
fetchccustomersinto@codigo,@compania,@contacto,
@pais
end
closeccustomers
deallocateccustomers
go
En la apertura del cursor, podemos especificar los
siguientes parámetros:
No hay comentarios:
Publicar un comentario