0% encontró este documento útil (0 votos)
7 vistas9 páginas

Cursores SQL Server

El documento presenta una comparación entre los gestores de bases de datos Oracle y SQL Server, enfocándose en la sintaxis para crear y manejar cursores en ambos sistemas. Se incluyen ejemplos prácticos de cursores en SQL Server, que abarcan operaciones como incrementar el stock de productos, simular el envío de correos electrónicos a clientes y listar productos comprados por clientes. Además, se proporciona una estructura detallada de cómo declarar, abrir, recorrer y cerrar cursores en SQL Server.

Cargado por

eescobare
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
7 vistas9 páginas

Cursores SQL Server

El documento presenta una comparación entre los gestores de bases de datos Oracle y SQL Server, enfocándose en la sintaxis para crear y manejar cursores en ambos sistemas. Se incluyen ejemplos prácticos de cursores en SQL Server, que abarcan operaciones como incrementar el stock de productos, simular el envío de correos electrónicos a clientes y listar productos comprados por clientes. Además, se proporciona una estructura detallada de cómo declarar, abrir, recorrer y cerrar cursores en SQL Server.

Cargado por

eescobare
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 9

________________________________________________________________________________

Gestión II/2024 Carrera de Informática - UMSA

CURSORES
1. Comparación entre los gestores Oracle y SQL Server:

• Sintaxis general para crear un cursor almacenado en ORACLE:


-- Declaración de un bloque PL/SQL
DECLARE
-- Declaración del cursor
CURSOR Cursor_Principal IS
SELECT columna1, columna2
FROM tabla1
WHERE condiciones; -- Condiciones opcionales para filtrar los datos
-- Declaración de variables para almacenar los valores obtenidos del cursor
variable1 tabla1.columna1%TYPE;
variable2 tabla1.columna2%TYPE;
BEGIN
-- Abrir el cursor
OPEN Cursor_Principal;
-- Iniciar el ciclo para recorrer las filas del cursor
LOOP
-- Extraer los valores de la fila actual del cursor
FETCH Cursor_Principal INTO variable1, variable2;
-- Verificar si se ha llegado al final del cursor
EXIT WHEN Cursor_Principal%NOTFOUND; -- Salir del ciclo cuando no haya más filas
-- Realizar las operaciones necesarias con los valores obtenidos
DBMS_OUTPUT.PUT_LINE('Columna1: ' || variable1 || ' - Columna2: ' || variable2); --
Ejemplo: imprimir los valores
END LOOP;
-- Cerrar el cursor
CLOSE Cursor_Principal;
END;

• Sintaxis general para crear un cursor almacenado en 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

-- Obtener la siguiente fila del cursor


FETCH NEXT FROM Nombre_Cursor INTO @variable1, @variable2;
-- Continuar obteniendo los datos hasta que no haya más filas
END
-- Cerrar el cursor
CLOSE Nombre_Cursor; -- Una vez que se hayan procesado todas las filas, se cierra el cursor
-- Liberar el cursor de la memoria
DEALLOCATE Nombre_Cursor; -- Se libera el cursor de la memoria para evitar fugas de recursos

2. Ejemplos de Cursores en SQL Server:

o Los ejemplos se realizarán en base al siguiente Modelo ER:

I. Crea un cursor que recorra todos los productos de la tabla PRODUCTO y


aumente su stock en un 10% si la categoría del producto es ''Tecnología'.

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);

-- Declaración del cursor en SQL Server


DECLARE Cliente_Cursor CURSOR FOR
SELECT c.id_cliente, c.nombre, c.email, c.direccion
FROM Cliente c
-- Abrir el cursor
OPEN Cliente_Cursor;
-- Iniciar el ciclo para recorrer las filas del cursor
FETCH NEXT FROM Cliente_Cursor INTO @xid_cliente, @xnombre, @xemail,
@xdireccion;
WHILE @@FETCH_STATUS = 0
BEGIN
-- Imprimir el nombre del producto
PRINT 'CLIENTE: ' + @xnombre;

-- Si la categoría es 'Tecnología', modificar el stock


IF @xdireccion LIKE 'Calle%' BEGIN
PRINT ' MENSAJE : ' + @xemail+ ' - ' + @xnombre ;
END

-- Obtener la siguiente fila del cursor


FETCH NEXT FROM Cliente_Cursor INTO @xid_cliente, @xnombre,
@xemail, @xdireccion;
END
-- Cerrar y liberar el cursor
CLOSE Cliente_Cursor;

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);

-- Declaración del cursor en SQL Server


DECLARE Suministra_Cursor CURSOR FOR
SELECT p.nombre, po.nombre_proveedor
FROM Suministra s,proveedor po, producto p
Where p.id_producto = s.id_producto AND s.id_proveedor =
po.id_proveedor;
________________________________________________________________________________
Gestión II/2024 Carrera de Informática - UMSA

-- 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);

-- Declaración del cursor para clientes


DECLARE Cliente_Cursor CURSOR FOR
SELECT c.id_cliente, c.nombre
FROM Cliente c;
-- Abrir el cursor de clientes
OPEN Cliente_Cursor;
-- Iniciar el ciclo para recorrer las filas del cursor de clientes
FETCH NEXT FROM Cliente_Cursor INTO @xid_cliente, @xnombre_cliente;
WHILE @@FETCH_STATUS = 0
BEGIN
-- Imprimir el nombre del cliente
PRINT 'CLIENTE: ' + @xnombre_cliente;
-- Declarar el cursor de productos dentro del ciclo para cada
cliente
DECLARE Producto_Cursor CURSOR FOR
SELECT p.nombre
FROM producto p
WHERE p.id_cliente = @xid_cliente;
-- Abrir el cursor de productos para el cliente actual
OPEN Producto_Cursor;
-- Iniciar el ciclo para recorrer las filas del cursor de
productos
FETCH NEXT FROM Producto_Cursor INTO @xnombre_pro;
WHILE @@FETCH_STATUS = 0
BEGIN
-- Imprimir el nombre del producto
PRINT ' PRODUCTO: ' + @xnombre_pro;
-- Obtener el siguiente producto
FETCH NEXT FROM Producto_Cursor INTO @xnombre_pro;
END
-- Cerrar y liberar el cursor de productos
________________________________________________________________________________
Gestión II/2024 Carrera de Informática - UMSA

CLOSE Producto_Cursor;
DEALLOCATE Producto_Cursor;

-- Obtener el siguiente cliente


FETCH NEXT FROM Cliente_Cursor INTO @xid_cliente, @xnombre_cliente;
END

-- Cerrar y liberar el cursor de clientes


CLOSE Cliente_Cursor;
DEALLOCATE Cliente_Cursor;

o Ejecución:

También podría gustarte