Cursores SQL Server
Cursores SQL Server
CURSORES
1. Comparación entre los gestores Oracle y SQL Server:
-- Declarar las variables necesarias para almacenar los valores obtenidos del cursor
DECLARE
@variable1 DataType, -- Aquí se declara la primera variable, con su tipo de dato correspondiente
@variable2 DataType; -- Aquí se declara la segunda variable, con su tipo de dato correspondiente
-- Declaración del cursor
DECLARE Nombre_Cursor CURSOR FOR
-- Consulta SQL que define los datos que el cursor recorrerá
SELECT columna1, columna2
FROM nombre_tabla
WHERE condiciones; -- Aquí se puede agregar una condición si es necesario
-- Abrir el cursor
OPEN Nombre_Cursor;
-- Iniciar el ciclo para recorrer cada fila del cursor
FETCH NEXT FROM Nombre_Cursor INTO @variable1, @variable2;
________________________________________________________________________________
Gestión II/2024 Carrera de Informática - UMSA
-- 'FETCH NEXT' obtiene la siguiente fila del cursor y asigna los valores a las variables
-- Comienza el ciclo WHILE para recorrer todas las filas del cursor
WHILE @@FETCH_STATUS = 0 -- @@FETCH_STATUS = 0 significa que la lectura fue
exitosa
BEGIN
-- Aquí puedes realizar las acciones necesarias con los datos obtenidos
PRINT 'Columna1: ' + CAST(@variable1 AS VARCHAR(50)); -- Ejemplo: Imprimir el valor
de la primera variable
PRINT 'Columna2: ' + CAST(@variable2 AS VARCHAR(50)); -- Ejemplo: Imprimir el valor
de la segunda variable
DECLARE
@xid_producto INT,
@xnombre VARCHAR(50),
@xcategoria VARCHAR(100),
@xstock INT,
@zstock INT,
________________________________________________________________________________
Gestión II/2024 Carrera de Informática - UMSA
@cont INT;
-- Inicializar el contador
SET @cont = 0;
-- Declaración del cursor en SQL Server
DECLARE Producto_Cursor CURSOR FOR
SELECT p.id_producto, p.nombre, p.categoria, p.stock
FROM Producto p
GROUP BY p.id_producto, p.nombre, p.categoria, p.stock; -- Se deben
agrupar por todos los campos seleccionados
-- Abrir el cursor
OPEN Producto_Cursor;
-- Iniciar el ciclo para recorrer las filas del cursor
FETCH NEXT FROM Producto_Cursor INTO @xid_producto, @xnombre, @xcategoria,
@xstock;
WHILE @@FETCH_STATUS = 0
BEGIN
-- Imprimir el nombre del producto
PRINT 'Producto: ' + @xnombre;
-- Asignar el valor de stock original
SET @zstock = @xstock;
-- Si la categoría es 'Tecnología', modificar el stock
IF @xcategoria = 'Tecnología' BEGIN
SET @zstock = @xstock + (@xstock * 0.10); -- Incremento del 10%
SET @cont = @cont + 1;
END
-- Mostrar los resultados dependiendo del contador
IF @cont > 1 BEGIN
PRINT ' STOCK MODIFICADO: ' + CAST(@zstock AS VARCHAR) ;
END ELSE
BEGIN
PRINT ' STOCK: ' + CAST(@zstock AS VARCHAR);
END
-- Obtener la siguiente fila del cursor
FETCH NEXT FROM Producto_Cursor INTO @xid_producto, @xnombre,
@xcategoria, @xstock;
END
-- Cerrar y liberar el cursor
CLOSE Producto_Cursor;
o Ejecución:
________________________________________________________________________________
Gestión II/2024 Carrera de Informática - UMSA
________________________________________________________________________________
Gestión II/2024 Carrera de Informática - UMSA
II. Crea un cursor que recorra todos los clientes de la tabla CLIENTE y simule
el envío de un email (mostrando un mensaje con el email y nombre del
cliente) si el cliente vive en una dirección que contiene la palabra 'Calle'.
DECLARE
@xid_cliente INT,
@xnombre VARCHAR(50),
@xemail VARCHAR(100),
@xdireccion VARCHAR(50);
o Ejecución:
________________________________________________________________________________
Gestión II/2024 Carrera de Informática - UMSA
III. Crea un cursor que recorra la tabla SUMINISTRA y muestre el nombre del
proveedor junto con el nombre del producto que suministra.
DECLARE
@producto_no VARCHAR(50),
@provedor_no VARCHAR(50);
-- Abrir el cursor
OPEN Suministra_Cursor;
-- Iniciar el ciclo para recorrer las filas del cursor
FETCH NEXT FROM Suministra_Cursor INTO @producto_no, @provedor_no;
WHILE @@FETCH_STATUS = 0
BEGIN
-- Imprimir el nombre del producto
PRINT ' Provedor : ' + @provedor_no;
PRINT ' Producto : ' + @producto_no;
PRINT ' '
PRINT
'______________________________________________________________'
FETCH NEXT FROM Suministra_Cursor INTO @producto_no, @provedor_no;
END
-- Cerrar y liberar el cursor
CLOSE Suministra_Cursor;
o Ejecución:
________________________________________________________________________________
Gestión II/2024 Carrera de Informática - UMSA
IV. Crea un cursor que recorra los clientes y, para cada cliente, liste todos los
productos que ha comprado, mostrando el nombre del cliente seguido por
los productos.
DECLARE
@xid_cliente INT,
@xnombre_cliente VARCHAR(50),
@xnombre_pro VARCHAR(50);
CLOSE Producto_Cursor;
DEALLOCATE Producto_Cursor;
o Ejecución: