Está en la página 1de 5

INFORME DE

RESULTADOS DE
APLICACIÓN DE LA
GUÍA DE PRÁCTICAS
Aprendizaje Práctico
Experimental
FR.01.1-002 / V1.0 / 04-11-2020
Universidad Estatal de Milagro

Facultad de Ingeniería en Software

Materia:
Administración de Base de Datos

Docente:
Ing. Oscar Bermeo Almeida

Estudiantes:
Marcos Ismael Cuadrado Bazan
Lilia Steffania Barahona Medina
Homar Gabriel Aguirre Iñiguez
20 de agosto del 2021
Realizar los siguientes enunciados.

 Procedimiento almacenado:
Crear un procedimiento almacenado para poder crear una venta enviado como parámetros
solo el número de cedula del cliente, forma de pago y la fecha de registro. Debe aplicar
BEGIN, COMMIT, ROLLBACK y el empleo del TRY y CATCH.
 Cursor:
En el mismo procedimiento almacenado crear un cursor que me permita llenar el detalle de
la venta, pero bajo las siguientes condiciones. Si la edad del cliente es par se debe insertar
aleatoriamente 6 registros de productos que tengan stock, si la edad del cliente es impar solo
4 registros que su categoría no comience con una vocal y tengan stock.

CREATE PROC SP_TALLER_VENTA


@CEDULA VARCHAR(100),
@METODO_PAGO INT,
@FECHA_REG DATE
AS
BEGIN
BEGIN TRY
BEGIN TRAN
DECLARE @IDVENTA INT = (SELECT ISNULL(MAX(IDVENTA), 0) + 1 FROM
VENTA)

INSERT VENTA VALUES (


@IDVENTA,
@FECHA_REG,
@METODO_PAGO,
(SELECT IDCLIENTE FROM CLIENTE WHERE CEDULA = @CEDULA),
0,
0,
0,
0
)

DECLARE @IDPRODUCTO INT


DECLARE @PVP REAL

IF ((SELECT DATEDIFF(YEAR, FECHA_NAC, GETDATE()) % 2 FROM CLIENTE


WHERE CEDULA = @CEDULA) = 0)
BEGIN
DECLARE CUR_DETALLE CURSOR
FOR SELECT TOP 6 IDPRODUCTO, PVP
FROM PRODUCTO
WHERE STOCK > 0
OPEN CUR_DETALLE
FETCH CUR_DETALLE INTO @IDPRODUCTO, @PVP
WHILE @@FETCH_STATUS = 0
BEGIN
INSERT DETALLE VALUES (
@IDVENTA,
@IDPRODUCTO,
5,
(@PVP * 5)
)
FETCH CUR_DETALLE INTO @IDPRODUCTO, @PVP
END

CLOSE CUR_DETALLE
DEALLOCATE CUR_DETALLE
END
ELSE
BEGIN
DECLARE CUR_DETALLE CURSOR
FOR SELECT TOP 4 IDPRODUCTO, PVP
FROM PRODUCTO P JOIN CATEGORIA C ON
P.IDCATEGORIA = C.IDCATEGORIA
WHERE C.NOMBRE LIKE '[^AEIOU]%' AND STOCK > 0
OPEN CUR_DETALLE
FETCH CUR_DETALLE INTO @IDPRODUCTO, @PVP
WHILE @@FETCH_STATUS = 0
BEGIN
INSERT DETALLE VALUES (@IDVENTA, @IDPRODUCTO, 5,
@PVP * 5)

FETCH CUR_DETALLE INTO @IDPRODUCTO, @PVP


END

CLOSE CUR_DETALLE
DEALLOCATE CUR_DETALLE
END
COMMIT TRAN
END TRY

BEGIN CATCH
ROLLBACK TRAN
PRINT ERROR_MESSAGE()
END CATCH
END
GO

____________________________________________________________________________

 Trigger
Crear un trigger para reducir el stock del producto cada vez que se inserte un producto en el
detalle de venta

CREATE TRIGGER TR_REDUCIR_STOCK


ON DETALLE AFTER INSERT
AS
BEGIN TRY
DECLARE @IDPRODUCTO INT
DECLARE @CANT INT

SELECT @IDPRODUCTO = IDPRODUCTO, @CANT = CANT FROM inserted


UPDATE PRODUCTO SET STOCK = STOCK - @CANT WHERE IDPRODUCTO = @IDPRODUCTO
END TRY
BEGIN CATCH
PRINT ERROR_MESSAGE()
END CATCH
GO

EXEC SP_TALLER_VENTA '0922563991', 1, '2021-08-19'

SELECT * FROM VENTA


SELECT * FROM DETALLE
SELECT * FROM PRODUCTO

También podría gustarte