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.