Está en la página 1de 5

Facultad de tecnología

LAB 8

Universitario (a): David Geraldino Suyo Bautista

Carrera: Ingeniería en ciencias de la computación

Docente: Ing. R. Villafán

Materia: bdd ll

Horario: viernes 2pm

Fecha: 25/06/2022
USE COMPRAS;

EJERCICIO 1:

DELIMITER //
CREATE PROCEDURE PA_TRANSAC1(IN NPERSONA VARCHAR(35), IN DESCRIP VARCHAR(35), IN CSOL INT, IN NSOL
INT)
BEGIN
DECLARE ITEMP INT; DECLARE CODIGO CHAR(6); DECLARE PRE FLOAT; DECLARE NITE CHAR(14);
SET AUTOCOMMIT=0;
START TRANSACTION;
IF EXISTS(SELECT * FROM PERSONAL WHERE NOMBREPER=NPERSONA) THEN
IF EXISTS(SELECT * FROM ARTICULO WHERE DESCRIPCION=DESCRIP) THEN
IF NOT EXISTS(SELECT * FROM SOLICITUD WHERE NUMSOL=NSOL) THEN
IF NOT EXISTS(SELECT * FROM COMPRA WHERE NUMSOL=NSOL) THEN
BEGIN
SELECT ITEMPER INTO ITEMP FROM PERSONAL WHERE NOMBREPER = NPERSONA;
SELECT CODART, PRECIO INTO CODIGO, PRE FROM ARTICULO WHERE DESCRIPCION = DESCRIP;
SELECT NITEMP INTO NITE FROM PERSONAL WHERE NOMBREPER = NPERSONA;
INSERT INTO SOLICITUD VALUES (NSOL, NOW(), CSOL, '', ITEMP, CODIGO);
INSERT INTO COMPRA VALUES (CODIGO, NITE, CSOL, CSOL * PRE, NSOL);
IF (MYSQL_ERRNO <> 0) THEN
BEGIN
ROLLBACK;
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'TRANSACCION NO COMPLETA', MYSQL_ERRNO = '1006';
END; END IF;
END;
ELSE SELECT 'LA COMPRA YA FUE REGISTRADA' AS MENSAJE; END IF;
ELSE SELECT 'SOLICITUD YA EXISTE' AS MENSAJE; END IF;
ELSE SELECT 'EL ARTICULO ON SE ENCUENTRA REGISTRADO' AS MENSAJE; END IF;
ELSE SELECT 'EL PERSONAL NO ESTA REGISTRADO EN LA BASE DE DATOS' AS MENSAJE; END IF;
COMMIT;
END //
DELIMITER ;

CALL PA_TRANSAC1('ANAMARIA LOPEZ', 'ACEITE FINO', 5, 1006);


EJERCICIO 2:

DELIMITER //
CREATE PROCEDURE PA_TRANSAC2(IN NPERSONA VARCHAR(35), IN DESCRIP VARCHAR(35), IN NSOL INT)
BEGIN
DECLARE CODIGO CHAR(6); DECLARE PRE FLOAT; DECLARE CSOL INT; DECLARE NITE CHAR(12);
SET AUTOCOMMIT = 0;
START TRANSACTION;
IF EXISTS (SELECT * FROM PERSONAL WHERE NOMBREPER = NPERSONA) THEN
IF EXISTS (SELECT * FROM ARTICULO WHERE DESCRIPCION = DESCRIP) THEN
IF EXISTS (SELECT * FROM SOLICITUD WHERE NUMSOL = NSOL) THEN
IF NOT EXISTS (SELECT * FROM COMPRA WHERE NUMSOL= NSOL) THEN
BEGIN
SELECT CODART, PREO INTO CODIGO, PRE FROM ARTICULO WHERE DESCRIPCION = DESCRIP;
SELECT NITEMP INTO NITE FROM EPRSONAL WHERE NOMBREPER = NPERSONA;
SELECT CANTIDADSOL INTO CSOL FROM SOLICITUD WHERE NUMSOL = NSOL;
INSERT INTO COMPRA VALUES(CODIGO, NITE, CSOL, CSOL * PRE, NSOL);
UPDATE SOLICITUD SET ST = 'B' WHERE NUMSOL = NSOLL;
IF ( MYSQL_ERRNO <> 0) THEN
BEGIN ROLLBACK;
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Transacción no completada', MYSQL_ERRNO = '10066'; END;
END IF;
END;
ELSE SELECT 'El número de solicitud ya existe en compra';
END IF;
ELSE SELECT 'El número de solicitud no existe';
END IF;
ELSE SELECT 'El artículo no está registrado';
END IF;
ELSE SELECT 'El nombre de la persona no existe';
END IF;
COMMIT;
END //
DELIMITER ;

INSERT INTO SOLICITUD VALUES (1008, NOW(), 10, '', 123456, 'A-1003');
CALL PA_TRANSAC2('JULIO ORTIZ', 'AZUCAR SAN AURELIO', 1008);
USE COMPRAS;
SELECT * FROM SOLICITUD;
SELECT * FROM ARTICULO;

EJERCICIO 3:

DELIMITER //
CREATE PROCEDURE PA_TRANSAC3(IN DESCRIP VARCHAR(35), IN CSOLN INT, IN NSOL INT)
BEGIN
DECLARE PRE FLOAT;
SET AUTOCOMMIT = 0;
START TRANSACTION;
IF EXISTS (SELECT * FROM ARTICULO WHERE DESCRIPCION = DESCRIP) THEN
IF EXISTS (SELECT * FROM SOLICITUD WHERE NUMSOL = NSOL) THEN
IF EXISTS (SELECT * FROM COMPRA WHERE NUMSOL= NSOL) THEN
BEGIN
SELECT PRECIO INTO PRE FROM ARTICULO WHERE DESCRIPCION = DESCRIP;
UPDATE SOLICITUD SET CANTIDADSOL=CSOLN WHERE NUMSOL = NSOL;
UPDATE COMPRA SET CANTIDAD = CSOLN, COSTOTOTAL = CSOLN * PRE WHERE NUMSOL = NSOL;
IF (MYSQL_ERRNO <> 0) THEN
BEGIN ROLLBACK;
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT= 'Transacción no completada', MYSQL_ERRNO = '1006'; END;
END IF;
END;
ELSE SELECT 'El número de solicitud no existe en compra';
END IF;
ELSE SELECT 'El número de solicitud no existe';
END IF;
ELSE SELECT 'El artículo no esta registrado';
END IF;
COMMIT;
END //
DELIMITER ;

CALL PA_TRANSAC3('ACEITE FINO', 25, 1006);

También podría gustarte