Computing">
SQL2 - S4 - 7 - Marzo - 2020PROFESOR Seps
SQL2 - S4 - 7 - Marzo - 2020PROFESOR Seps
SQL2 - S4 - 7 - Marzo - 2020PROFESOR Seps
1 Valor nulo
2 Curso no programado
3 Alumno no registrado
4 No hay vacantes para el curso
5 El curso ya no esta activo.
6 Error de BD
SOLUCION: */
USE EduTec
GO
--Se requieren tres parametros de entrada
CREATE PROCEDURE spu_MatriculaAlumno
@cursoprog INT, @idalumno CHAR(5), @fecmatricula DATETIME
AS
DECLARE @vacantes TINYINT
DECLARE @activo BIT
IF (@cursoprog IS NULL) OR
(@idalumno IS NULL) OR
(@fecmatricula IS NULL)
BEGIN
PRINT 'VALOR NULO'
RETURN 1
END
IF NOT EXISTS(SELECT idcursoprog FROM cursoprogramado
WHERE idcursoprog = @cursoprog)
BEGIN
PRINT 'ESTE CURSO NO ESTA PROGRAMADO'
RETURN 2
END
IF NOT EXISTS(SELECT apealumno + ', ' + nomalumno FROM alumno
WHERE IDALUMNO = @idalumno)
BEGIN
PRINT 'EL ALUMNO NO ESTA REGISTRADO'
RETURN 3
END
SELECT @vacantes = vacantes, @activo = activo FROM cursoprogramado
WHERE idcursoprog = @cursoprog
IF @vacantes = 0
BEGIN
PRINT 'YA NO HAY VACANTES PARA ESTE CURSO'
RETURN 4
END
IF @activo = 0
BEGIN
PRINT 'EL CURSO YA NO ESTA ACTIVO'
RETURN 5
END
BEGIN TRAN
UPDATE CursoProgramado
SET vacantes = vacantes -1, matriculados = matriculados + 1
WHERE idcursoprog = @cursoprog
INSERT INTO matricula (idcursoprog,idalumno,fecmatricula)
VALUES (@cursoprog,@idalumno,@fecmatricula)
IF @@ERROR <> 0
BEGIN
PRINT ' ERROR EN LA BD'
ROLLBACK TRAN
RETURN 6
END
COMMIT TRAN
RETURN 0
GO
-- Prueba del SP -- Condiciones iniciales:
SELECT * FROM MATRICULA WHERE IDALUMNO='A0010'
SELECT * FROM CURSOPROGRAMADO WHERE IDCURSOPROG = 9
SELECT * FROM MATRICULA WHERE IDCURSOPROG = 9
GO
DECLARE @RET INT
EXEC @RET = spu_MatriculaAlumno 9,'A0010','20200307'
SELECT @RET
GO
-- Verificando si el Alumno esta matriculado
SELECT * FROM MATRICULA WHERE IDALUMNO='A0010'
SELECT * FROM CURSOPROGRAMADO WHERE IDCURSOPROG = 9
SELECT * FROM MATRICULA WHERE IDCURSOPROG = 9
GO
-- Con un Alumno no registrado.
DECLARE @RET INT
EXEC @RET = spu_MatriculaAlumno 9,'B0002','20200307'
SELECT @RET
GO
-- Con un curso no programado.
SELECT * FROM CursoProgramado
GO
DECLARE @RET INT
EXEC @RET = spu_MatriculaAlumno 51,'A0002','20200307'
SELECT @RET
GO
-- con un curso que no tiene vacantes
SELECT * FROM CursoProgramado
GO
--cambiamos los datos de la tabla para probar
UPDATE CursoProgramado SET Vacantes=0, Matriculados=20
WHERE IdCursoProg = 44
GO
DECLARE @RET INT
EXEC @RET = spu_MatriculaAlumno 44,'A0009','20200307'
SELECT @RET
GO
--regresamos la tabla a su estado original
UPDATE CursoProgramado SET Vacantes=20, Matriculados=0
WHERE IdCursoProg = 44
GO
--Caso de un curso que se ha desactivado
SELECT * FROM CursoProgramado WHERE IdCursoProg = 43
GO
-- cambiamos los datos de la tabla para probar
UPDATE CursoProgramado SET Activo=0 WHERE IdCursoProg = 43
GO
SELECT * FROM CursoProgramado WHERE IdCursoProg = 43
GO
DECLARE @RET INT
EXEC @RET = spu_MatriculaAlumno 43,'A0009','20200307'
SELECT @RET
GO
--********************************************
/* Crear un SP en Northwind, que permita ingresar un detalle de pedido
para probar debera crear un nuevo pedido(sin detalles)
luego verificar el SP para los detalles del nuevo pedido
-La existencia del producto y pedido
-Verificar el stock del producto que se va a vender.
Debe ser mayor o igual que la cantidad que se desea vender
-Verificar si el producto esta continuado,
si es contrario no se puede vender el producto
-Si se cumplen las condiciones crear el detalle
-Actualizar la tabla de productos para el stock vendido*/
USE Northwind
GO
SP_HELP [ORDER DETAILS]
GO
CREATE PROCEDURE spu_IngresarDetallePedido
@orderid INT,
@productid INT,
@quantity SMALLINT,
@discount REAL
AS
DECLARE @unitprice MONEY
SELECT @unitprice = UnitPrice FROM Products
WHERE ProductID = @productid
IF (@orderid IS NULL) OR (@productid IS NULL) OR
(@quantity IS NULL) OR (@discount IS NULL)
BEGIN
PRINT 'VALOR NULO'
RETURN 1
END
IF NOT EXISTS(SELECT ProductID FROM Products
WHERE ProductID = @productid)
BEGIN
PRINT 'ESTE PRODUCTO NO EXISTE'
RETURN 2
END
IF NOT EXISTS(SELECT OrderID FROM Orders WHERE OrderID = @orderid)
BEGIN
PRINT 'ESTE PEDIDO NO EXISTE'
RETURN 3
END
IF (SELECT UnitsInStock FROM Products WHERE ProductID=@productid)
< @quantity
BEGIN
PRINT 'LA CANTIDAD INGRESADA ES MAYOR AL STOCK'
RETURN 4
END
IF (SELECT Discontinued FROM Products WHERE ProductID = @productid) = 1
BEGIN
PRINT 'EL PRODUCTO ESTA DESCONTINUADO'
RETURN 5
END
--........Terminar la transaccion y probar el SP