-- --------------------------------------------------------
-- Versión del servidor:         8.0.40 - MySQL Community Server - GPL
-- SO del servidor:              Win64
-- HeidiSQL Versión:             12.10.0.7000
-- --------------------------------------------------------



-- Volcando estructura de base de datos para eva3
CREATE DATABASE IF NOT EXISTS `eva3` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */;
USE `eva3`;

-- Volcando estructura para tabla eva3.alumnos
CREATE TABLE IF NOT EXISTS `alumnos` (
  `id` int NOT NULL AUTO_INCREMENT,
  `nombre` varchar(20) DEFAULT NULL,
  `apellidos` varchar(40) DEFAULT NULL,
  `fechanac` date DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

-- Volcando datos para la tabla eva3.alumnos: ~2 rows (aproximadamente)
INSERT INTO `alumnos` (`id`, `nombre`, `apellidos`, `fechanac`) VALUES
	(4, 'Perico', 'Palotes', '2025-03-26'),
	(5, 'Luisito', 'Pérez', '2025-03-26');

-- Volcando estructura para función eva3.aplica_porcentaje
DROP FUNCTION IF EXISTS `aplica_porcentaje`;
DELIMITER //
CREATE FUNCTION `aplica_porcentaje`(
	`pBase` DECIMAL(10,2),
	`pPorcentaje` DECIMAL(10,2),
	`pTipo` CHAR(1)
) RETURNS decimal(10,2)
    DETERMINISTIC
BEGIN
  DECLARE res DECIMAL(10,2);
  if lower(pTipo)="i" then
    SET res:= pBase * (1+pPorcentaje/100);
  else
    if lower(pTipo)="d" then
    	SET res:=pBase * (1-pPorcentaje/100);
     else
       SET res:=-1;
	  END if;	
  END if;
  RETURN res;
END//
DELIMITER ;

-- Volcando estructura para función eva3.aplica_porcentaje2
DROP FUNCTION IF EXISTS `aplica_porcentaje2`;
DELIMITER //
CREATE FUNCTION `aplica_porcentaje2`(
	`pBase` DECIMAL(10,2),
	`pPorcentaje` DECIMAL(10,2),
	`pTipo` CHAR(1)
) RETURNS decimal(10,2)
    DETERMINISTIC
BEGIN
  DECLARE res DECIMAL(10,2);
  case lower(pTipo)
    when "i" then SET res:= pBase * (1+pPorcentaje/100);
    when "d" then SET res:= pBase * (1-pPorcentaje/100);
    ELSE SET res:=-1;
  END case;
  RETURN res;
END//
DELIMITER ;

-- Volcando estructura para procedimiento eva3.ArreglaAlumnos
DROP PROCEDURE IF EXISTS `ArreglaAlumnos`;
DELIMITER //
CREATE PROCEDURE `ArreglaAlumnos`()
    DETERMINISTIC
BEGIN
 -- crear tabla temporal
 CREATE TABLE if NOT EXISTS tmp  SELECT * FROM alumnos;
 TRUNCATE alumnos;
 INSERT INTO alumnos (nombre, apellidos, fechanac)
 SELECT ArreglaTexto(nombre), apellidos, fechanac 
 FROM tmp;
 -- deshacer temporal
 DROP TABLE if exists tmp;  
END//
DELIMITER ;

-- Volcando estructura para función eva3.ArreglaTexto
DROP FUNCTION IF EXISTS `ArreglaTexto`;
DELIMITER //
CREATE FUNCTION `ArreglaTexto`(
	`pTxt` VARCHAR(500)
) RETURNS varchar(500) CHARSET utf8mb4
    DETERMINISTIC
BEGIN
  DECLARE txt VARCHAR(500);
  SET txt:=CONCAT(UPPER(LEFT(pTxt,1)),
    LOWER(SUBSTR(pTxt,2)));
  RETURN txt;
END//
DELIMITER ;

-- Volcando estructura para procedimiento eva3.CreaAlumnos
DROP PROCEDURE IF EXISTS `CreaAlumnos`;
DELIMITER //
CREATE PROCEDURE `CreaAlumnos`(
	IN `pNombre` VARCHAR(20),
	IN `pApellidos` VARCHAR(40),
	IN `pFechaNac` DATE
)
    DETERMINISTIC
BEGIN
  DECLARE i INT;
  set i:=0;
  INSERT INTO alumnos (nombre,apellidos,fechanac)
  VALUES (pNombre,pApellidos,pFechaNac);
END//
DELIMITER ;

-- Volcando estructura para procedimiento eva3.CreaTAlumnos
DROP PROCEDURE IF EXISTS `CreaTAlumnos`;
DELIMITER //
CREATE PROCEDURE `CreaTAlumnos`()
    DETERMINISTIC
BEGIN
  CREATE TABLE if NOT EXISTS alumnos(
    id INT AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(20),
    apellidos VARCHAR(40),
    fechanac DATE);
END//
DELIMITER ;

-- Volcando estructura para función eva3.factorial
DROP FUNCTION IF EXISTS `factorial`;
DELIMITER //
CREATE FUNCTION `factorial`(
	`pNum` INT
) RETURNS bigint
    DETERMINISTIC
BEGIN
  DECLARE i INT DEFAULT pNum-1;
  DECLARE total BIGINT;
  SET total:= pNum;
  while i>1 DO
    SET total:= total * i;
    SET i:= i-1;
  END while;
  RETURN total;
END//
DELIMITER ;

-- Volcando estructura para función eva3.factorial2
DROP FUNCTION IF EXISTS `factorial2`;
DELIMITER //
CREATE FUNCTION `factorial2`(
	`pNum` INT
) RETURNS bigint
    DETERMINISTIC
BEGIN
 DECLARE i INT DEFAULT pNum-1;
  DECLARE total BIGINT;
  SET total:= pNum;
  if pNum > 1 then
	  repeat
		 SET total:= total * i;
	    SET i:= i-1;
	  until i<=1  END repeat;
   else
      SET total:= pNum;
   END if;
  RETURN total;
END//
DELIMITER ;

-- Volcando estructura para función eva3.factorial3
DROP FUNCTION IF EXISTS `factorial3`;
DELIMITER //
CREATE FUNCTION `factorial3`(
	`pNum` INT
) RETURNS bigint
    DETERMINISTIC
BEGIN
  DECLARE res BIGINT DEFAULT 1;
  if pNum > 1 then
	  bucle: loop
			SET res := res * pNum;
			SET pNum := pNum-1;
			if pNum = 1 then
				leave bucle;
			END if;
	  END loop;
   END if;
  RETURN res;
END//
DELIMITER ;

-- Volcando estructura para procedimiento eva3.factorial4
DROP PROCEDURE IF EXISTS `factorial4`;
DELIMITER //
CREATE PROCEDURE `factorial4`(
	IN `pNum` INT,
	OUT `pResultado` BIGINT
)
    DETERMINISTIC
BEGIN
  if (pNum > 0) then 
     CALL factorial4(pNum-1,pResultado);
     SET pResultado = pNum * pResultado;
  else
    SET pResultado:= 1;
  END if; 
END//
DELIMITER ;

-- Volcando estructura para función eva3.factorial5
DROP FUNCTION IF EXISTS `factorial5`;
DELIMITER //
CREATE FUNCTION `factorial5`(
	`pNum` INT
) RETURNS bigint
    DETERMINISTIC
BEGIN
  DECLARE miresultado BIGINT;
  CALL factorial4(pNum,miresultado);
  RETURN miresultado;
END//
DELIMITER ;

-- Volcando estructura para función eva3.HolaMundo
DROP FUNCTION IF EXISTS `HolaMundo`;
DELIMITER //
CREATE FUNCTION `HolaMundo`() RETURNS varchar(200) CHARSET utf8mb4
    DETERMINISTIC
BEGIN
  RETURN "Hola Mundo Cruel";
END//
DELIMITER ;

-- Volcando estructura para función eva3.holamundo2
DROP FUNCTION IF EXISTS `holamundo2`;
DELIMITER //
CREATE FUNCTION `holamundo2`() RETURNS int
    DETERMINISTIC
BEGIN
   DECLARE i INT;
   SET i:= 1;
   RETURN -1;
END//
DELIMITER ;

-- Volcando estructura para tabla eva3.modulos
CREATE TABLE IF NOT EXISTS `modulos` (
  `id` int NOT NULL AUTO_INCREMENT,
  `nombre` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

-- Volcando datos para la tabla eva3.modulos: ~8 rows (aproximadamente)
INSERT INTO `modulos` (`id`, `nombre`) VALUES
	(1, 'bbdd'),
	(2, 'prog'),
	(3, 'entornos'),
	(4, 'marcas'),
	(5, 'sistemas'),
	(6, 'fol'),
	(7, 'ingles'),
	(8, 'proyecto');

-- Volcando estructura para tabla eva3.nombres_semicolon
CREATE TABLE IF NOT EXISTS `nombres_semicolon` (
  `Nombre` varchar(20) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

-- Volcando datos para la tabla eva3.nombres_semicolon: ~51 rows (aproximadamente)
INSERT INTO `nombres_semicolon` (`Nombre`) VALUES
	('\nÓscar Flores'),
	('\nVicente Peña'),
	('\nCarlos Martínez'),
	('\nRaúl Pérez'),
	('\nSergio Pérez'),
	('\nAlejandro Peña'),
	('\nGonzalo Lara'),
	('\nMiguel Ríos'),
	('\nEmilio Pérez'),
	('\nIsabel Soto'),
	('\nLuis Delgado'),
	('\nSergio Soto'),
	('\nDiego Jiménez'),
	('\nLaura Ortega'),
	('\nJavier Gutiérrez'),
	('\nAndrés Fernández'),
	('\nGonzalo Rubio'),
	('\nLaura Campos'),
	('\nGonzalo Ramírez'),
	('\nManuel Ortega'),
	('\nRaúl Sánchez'),
	('\nGonzalo Reyes'),
	('\nGabriela Reyes'),
	('\nSilvia Rivera'),
	('\nSofía Domínguez'),
	('\nHugo González'),
	('\nSofía Herrera'),
	('\nCarlos Torres'),
	('\nEmilio Jiménez'),
	('\nMarina Méndez'),
	('\nMarina Serrano'),
	('\nCarlos Suárez'),
	('\nSilvia Vega'),
	('\nFernando Soto'),
	('\nEmilio López'),
	('\nAlberto Pérez'),
	('\nEmilio Ríos'),
	('\nAlejandro Gutiérrez'),
	('\nMiguel Méndez'),
	('\nRosa Marín'),
	('\nFernando Soto'),
	('\nEsther Ortega'),
	('\nManuel Bravo'),
	('\nEva Calvo'),
	('\nRoberto Reyes'),
	('\nLuis Blanco'),
	('\nRoberto Ramírez'),
	('\nCarlos Serrano'),
	('\nNatalia Molina'),
	('\nJulia Flores'),
	('\n');

-- Volcando estructura para tabla eva3.notas
CREATE TABLE IF NOT EXISTS `notas` (
  `fk_alumno` int NOT NULL,
  `fk_modulo` int NOT NULL,
  `nota` int DEFAULT '1',
  PRIMARY KEY (`fk_alumno`,`fk_modulo`),
  KEY `fk_alumnos_has_modulos_modulos1_idx` (`fk_modulo`),
  KEY `fk_alumnos_has_modulos_alumnos_idx` (`fk_alumno`),
  CONSTRAINT `fk_alumnos_has_modulos_alumnos` FOREIGN KEY (`fk_alumno`) REFERENCES `alumnos` (`id`),
  CONSTRAINT `fk_alumnos_has_modulos_modulos1` FOREIGN KEY (`fk_modulo`) REFERENCES `modulos` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

-- Volcando datos para la tabla eva3.notas: ~5 rows (aproximadamente)
INSERT INTO `notas` (`fk_alumno`, `fk_modulo`, `nota`) VALUES
	(4, 1, 10),
	(4, 3, 4),
	(4, 4, 6),
	(5, 1, 1),
	(5, 2, 2),
	(5, 5, 3);

