Código tabla:
Ver original
tabla1 cod_dependencia cantidad 0000000001 3 0000000002 4 0000000003 3
entonces ahora me encuentro una función que supuestamente debe trabajar con aleatoriedad y equidad, osea que la cantidad debe repartirse equitativamente, pero no lo esta haciendo, les muestro la función
Código fn_getDependencia:
Ver original
BEGIN DECLARE done INT DEFAULT 0; DECLARE cantidad INT DEFAULT 0; DECLARE cod_dep VARCHAR(10); DECLARE num_dependencia INT; DECLARE posicion_actual INT DEFAULT 1; DECLARE cursor_dependencias CURSOR FOR SELECT cod_dependencia order by cantidad, rand() limit 1; DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1; OPEN cursor_dependencias; REPEAT FETCH cursor_dependencias INTO cod_dep; IF NOT done THEN SET cantidad = cantidad + 1; END IF; UNTIL done END REPEAT; CLOSE cursor_dependencias; IF cantidad > 1 THEN SET num_dependencia=FLOOR(RAND()*10)+1; SET done=0; OPEN cursor_dependencias; REPEAT FETCH cursor_dependencias INTO cod_dep; IF NOT done THEN SET posicion_actual = posicion_actual + 1; END IF; UNTIL done OR posicion_actual>=num_dependencia END REPEAT; CLOSE cursor_dependencias; END IF; RETURN cod_dep; END
esta función la estoy llamando a través de un procedimiento almacenado que es el que recibe el parámetro que me retorna la función y es el siguiente
Código usp_procedure:
Ver original
BEGIN DECLARE codigo_dependencia VARCHAR(10); -- Obtener la dependencia a la que se adjudicara el negocio. SET codigo_dependencia=fn_getDependencia(); END
el llamada lo estoy haciendo de la siguiente forma
Código query:
Ver original
CALL usp_procedure();
Hasta donde entiendo el select selecciona o me trae solo el registro con el valor menor en el campo cantidad, pero el resto del código no entiendo que hace o para que funciona. espero me puedan ayudar y disculpen mi ignorancia. saludos y gracias de antemano