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