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.