Está en la página 1de 6

Título: Ejercicio de cursor 2

Descripción: realice un ejercicio de cursor en SQL server usando la base de datos ComputerDB

1. Obtener los datos de ventas (1 punto)


a. Historia de usuario: reporte de ventas
b. Dado: un gerente de la empresa necesita los datos de ventas
c. Y filtre por año, mes, categoría de producto, color
d. Cuando: genere el reporte
e. Entonces: debe mostrar el año, nombre del mes, suma de ventas, suma de costo,
suma de utilidad, suma de la cantidad de productos vendidos y recuento de
producto vendidos.

--CODIGO

USE ComputerDB;
---1) REPORETE
DECLARE @anio VARCHAR(50); set @anio = (SELECT '2021');
-- CONSULTA
SELECT YEAR(s.fecha)[anio], DATENAME(MONTH, s.fecha) [mes],
c.nombreColor, sum(sd.precio * sd.cantidad )[ventas], sum(sd.costo)[costos],
SUM((sd.cantidad * sd.precio) / 9.3) [utilidad],
sum(sd.cantidad)[productosVendidos], count(sd.idProducto)[recuento]
FROM Salida s, SalidaDetalle sd, productos p,Color c
WHERE s.idSalida = sd.idSalidaDetalle AND YEAR(s.fecha) = @anio
GROUP BY DATENAME(MONTH, s.fecha) , c.nombreColor, YEAR(s.fecha)

2. Implementar cursor (1 punto)


-- 2) IMPLEMENTACION DE UN CURSOS
DECLARE @anioBusqueda VARCHAR(50), @anio VARCHAR(50), @mes VARCHAR(50),
@color varchar(50), @costos DECIMAL(18,2), @ventas DECIMAL(18,2), @utilidad
DECIMAL(18,2), @productosVendidos DECIMAL(18,2), @recuento DECIMAL(18,2)
DECLARE @resultado TABLE(anio varchar(50), mes VARCHAR(50), color
VARCHAR(50), ventas DECIMAL(18,2), costos DECIMAL(18,2), utilidad
DECIMAL(18,2),productosVendidos DECIMAL(18,2),recuento DECIMAL(18,2) ) set
@anioBusqueda2 = (SELECT '2021');

DECLARE currsorEjemplo CURSOR FOR

SELECT YEAR(s.fecha)[anio], DATENAME(MONTH, s.fecha) [mes], c.nombreColor,


sum(sd.precio * sd.cantidad )[ventas], sum(sd.costo)[costos],
SUM((sd.cantidad * sd.precio) / 9.3) [utilidad],
sum(sd.cantidad)[productosVendidos], count(sd.idProducto)[recuento]
FROM Salida s, SalidaDetalle sd, productos p,Color c
WHERE s.idSalida = sd.idSalidaDetalle AND YEAR(s.fecha) = @anioBusqueda
GROUP BY DATENAME(MONTH, s.fecha) , c.nombreColor, YEAR(s.fecha)

OPEN currsorEjemplo
FETCH NEXT FROM currsorEjemplo
INTO @anio, @mes, @color, @ventas, @costos,
@utilidad,@productosVendidos,@recuento
WHILE @@fetch_status = 0
BEGIN

INSERT INTO @resultado


SELECT @anio [anio], @mes [mes], @color[color], @ventas
[venta], @costos [costo], @utilidad [utilidad], @productosVendidos
[productosVendidos], @recuento [recuento]

FETCH NEXT FROM currsorEjemplo


INTO @anio, @mes,@color, @ventas, @costos, @utilidad,
@productosVendidos,@recuento
END

CLOSE currsorEjemplo
DEALLOCATE currsorEjemplo

SELECT * FROM @resultado


ORDER BY mes ASC
3. Implementen un procedimiento almacenado y TVP (1 punto)

-- 3) IMPLEMENTACION DE TVP
CREATE PROCEDURE ventas
AS
BEGIN
SET NOCOUNT ON
-- 2) cursor
DECLARE @anioBusqueda2 VARCHAR(50), @anio VARCHAR(50), @mes
VARCHAR(50), @color varchar(50), @costos DECIMAL(18,2), @ventas DECIMAL(18,2),
@utilidad DECIMAL(18,2), @productosVendidos DECIMAL(18,2), @recuento DECIMAL(18,2)
DECLARE @resultado TABLE(anio varchar(50), mes VARCHAR(50),
color VARCHAR(50), ventas DECIMAL(18,2), costos DECIMAL(18,2), utilidad
DECIMAL(18,2),productosVendidos DECIMAL(18,2),recuento DECIMAL(18,2) )
set @anioBusqueda2 = (SELECT '2021');
DECLARE currsorEjemplo CURSOR FOR

SELECT YEAR(s.fecha)[anio], DATENAME(MONTH, s.fecha) [mes],


c.nombreColor, sum(sd.precio * sd.cantidad )[ventas], sum(sd.costo)[costos],
SUM((sd.cantidad * sd.precio) / 9.3) [utilidad],
sum(sd.cantidad)[productosVendidos],
count(sd.idProducto)[recuento]
FROM Salida s, SalidaDetalle sd, productos p,Color c
WHERE s.idSalida = sd.idSalidaDetalle AND YEAR(s.fecha) =
@anioBusqueda2
GROUP BY DATENAME(MONTH, s.fecha) , c.nombreColor,
YEAR(s.fecha)

OPEN currsorEjemplo
FETCH NEXT FROM currsorEjemplo
INTO @anio, @mes, @color, @ventas, @costos,
@utilidad,@productosVendidos,@recuento
WHILE @@fetch_status = 0
BEGIN

INSERT INTO @resultado


SELECT @anio [anio], @mes [mes], @color[color],
@ventas [venta], @costos [costo], @utilidad [utilidad], @productosVendidos
[productosVendidos], @recuento [recuento]

FETCH NEXT FROM currsorEjemplo


INTO @anio, @mes,@color, @ventas, @costos, @utilidad,
@productosVendidos,@recuento
END

CLOSE currsorEjemplo
DEALLOCATE currsorEjemplo

SELECT * FROM @resultado


ORDER BY mes ASC

END

EXEC ventas

4. Implementar función (1 punto)

5. Implementar transacciones y manejo de errores ( 1 punto)

-- 5 TRANSACCIONES
ALTER PROCEDURE reporteDeVenta
AS
BEGIN
SET NOCOUNT ON
-- implemetancion del cursor
DECLARE @anioBusqueda2 VARCHAR(50), @anio VARCHAR(50), @mes VARCHAR(50), @color
varchar(50), @costos DECIMAL(18,2), @ventas DECIMAL(18,2), @utilidad DECIMAL(18,2),
@productosVendidos DECIMAL(18,2), @recuento DECIMAL(18,2)
DECLARE @resultado TABLE(anio varchar(50), mes VARCHAR(50), color VARCHAR(50),
ventas DECIMAL(18,2), costos DECIMAL(18,2), utilidad
DECIMAL(18,2),productosVendidos DECIMAL(18,2),recuento DECIMAL(18,2) )
set @anioBusqueda2 = (SELECT '2021');
DECLARE currsorEjemplo CURSOR FOR
SELECT YEAR(s.fecha)[anio], DATENAME(MONTH, s.fecha) [mes], c.nombreColor,
sum(sd.precio * sd.cantidad )[ventas], sum(sd.costo)[costos], SUM((sd.cantidad *
sd.precio) / 9.3) [utilidad],
sum(sd.cantidad)[productosVendidos], count(sd.idProducto)[recuento]
FROM Salida s, SalidaDetalle sd, productos p,Color c
WHERE s.idSalida = sd.idSalidaDetalle AND YEAR(s.fecha) = @anioBusqueda2
GROUP BY DATENAME(MONTH, s.fecha) , c.nombreColor, YEAR(s.fecha)
COMMIT TRAN consulta

OPEN currsorEjemplo
FETCH NEXT FROM currsorEjemplo
INTO @anio, @mes, @color, @ventas, @costos, @utilidad,@productosVendidos,@recuento
WHILE @@fetch_status = 0
BEGIN
BEGIN TRY
BEGIN TRANSACTION
INSERT INTO @resultado
SELECT @anio [anio], @mes [mes], @color[color], @ventas [venta],
@costos [costo], @utilidad [utilidad], @productosVendidos [productosVendidos],
@recuento [recuento]
commit transaction;
END TRY
BEGIN CATCH
rollback transaction;

END CATCH;
FETCH NEXT FROM currsorEjemplo
INTO @anio, @mes,@color, @ventas, @costos, @utilidad, @productosVendidos,@recuento
END

CLOSE currsorEjemplo
DEALLOCATE currsorEjemplo

SELECT * FROM @resultado


ORDER BY mes ASC

END

--- utilizar tvp


EXEC reporteDeVenta

Entregable: redacte un documento de Word con los enunciados y respuestas, suba el documento
a GoogleDrive dela cuenta de la Universidad Mariano Gálvez, posteriormente genere el link del
archivo a través de la opción compartir, y como respuesta de la tarea suba el link del archivo.
Nota: utilice los recursos de laboratorio para la actividad.

También podría gustarte