que tal, resulta que estoy trabajando en un proyecto hecho en mysql php, pero ahora me encuentro con que están utilizando procedimientos almacenados y la verdad no se manejarlos muy bien, tengo una la cual me trae tres valores de una tabla que tiene dos campos, seria algo así
Código tabla:
Ver originaltabla1
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 originalBEGIN
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 originalBEGIN
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
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