Actualizar salarios
procedimiento de actualizar salarios mejorado
función
DELIMITER $$
CREATE FUNCTION Calculo(años INT)
RETURNS FLOAT
DETERMINISTIC
BEGIN
DECLARE cinco FLOAT DEFAULT 1.05;
DECLARE diez FLOAT DEFAULT 1.10;
DECLARE veinte FLOAT DEFAULT 1.20;
DECLARE treinta FLOAT DEFAULT 1.30;
DECLARE porcentaje FLOAT;
-- Actualizar el salario según la antigüedad
IF años < 5 THEN
SET porcentaje = cinco; -- Incremento del 5%
ELSEIF años < 10 THEN
SET porcentaje = diez; -- Incremento del 10%
ELSEIF años < 20 THEN
SET porcentaje = veinte; -- Incremento del 20%
ELSE
SET porcentaje = treinta; -- Incremento del 30%
END IF;
RETURN porcentaje;
END
$$
DELIMITER ;
procedimiento
DELIMITER $$
CREATE PROCEDURE ActualizarSalariosMejorado()
BEGIN
-- Declaración de variables para el cursor
DECLARE _codigo CHAR(3);
DECLARE _salario FLOAT(6,2);
DECLARE _fecha DATE;
DECLARE antiguedad INT;
DECLARE fin_cursor BOOLEAN DEFAULT FALSE;
-- Declaración del cursor
DECLARE cursor_empleados CURSOR FOR
SELECT cdemp, salario, fecha_ingreso
FROM empleado;
-- Declaración del manejador para el fin del cursor
DECLARE CONTINUE HANDLER FOR NOT FOUND SET fin_cursor = TRUE;
-- Abrir el cursor
OPEN cursor_empleados;
-- Bucle para iterar sobre los resultados del cursor
REPEAT
FETCH cursor_empleados INTO _codigo, _salario, _fecha;
-- Verificar si se alcanzó el final del cursor
IF NOT fin_cursor THEN
-- Calcular la antigüedad en años
SET antiguedad = TIMESTAMPDIFF(YEAR, _fecha, CURDATE());
-- Actualizar el salario en la tabla
UPDATE empleado
SET salario = _salario * Calculo(antiguedad)
WHERE cdemp = _codigo;
END IF;
UNTIL fin_cursor
END REPEAT;
-- Cerrar el cursor
CLOSE cursor_empleados;
END
$$
DELIMITER ;
Ejecución
CALL ActualizarSalariosMejorado()
Deja una respuesta
Lo siento, debes estar conectado para publicar un comentario.