Ver Mensaje Individual
  #1 (permalink)  
Antiguo 07/12/2009, 13:20
programadorx
 
Fecha de Ingreso: diciembre-2006
Mensajes: 2
Antigüedad: 17 años, 4 meses
Puntos: 0
ayuda con cursor de procedimiento almacenado

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 original
  1. tabla1
  2.  
  3. cod_dependencia           cantidad
  4. 0000000001                    3
  5. 0000000002                    4
  6. 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
  1. BEGIN
  2.   DECLARE done INT DEFAULT 0;
  3.   DECLARE cantidad INT DEFAULT 0;
  4.   DECLARE cod_dep VARCHAR(10);
  5.   DECLARE num_dependencia INT;
  6.   DECLARE posicion_actual INT DEFAULT 1;
  7.  
  8.   DECLARE cursor_dependencias CURSOR FOR
  9.   SELECT cod_dependencia
  10.  order by cantidad,  rand() limit 1;
  11.  
  12.   DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
  13.  
  14.  
  15.   OPEN cursor_dependencias;
  16.  
  17.   REPEAT
  18.     FETCH cursor_dependencias INTO cod_dep;
  19.  
  20.     IF NOT done THEN
  21.       SET cantidad = cantidad + 1;
  22.     END IF;
  23.   UNTIL done END REPEAT;
  24.  
  25.   CLOSE cursor_dependencias;
  26.  
  27.  
  28.   IF cantidad > 1 THEN
  29.     SET num_dependencia=FLOOR(RAND()*10)+1;
  30.     SET done=0;
  31.  
  32.     OPEN cursor_dependencias;
  33.  
  34.     REPEAT
  35.       FETCH cursor_dependencias INTO cod_dep;
  36.  
  37.       IF NOT done THEN
  38.         SET posicion_actual = posicion_actual + 1;
  39.       END IF;
  40.     UNTIL done OR posicion_actual>=num_dependencia END REPEAT;
  41.  
  42.     CLOSE cursor_dependencias;
  43.   END IF;
  44.  
  45.  
  46.   RETURN cod_dep;
  47. 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
  1. BEGIN
  2.  
  3.   DECLARE codigo_dependencia VARCHAR(10);
  4.  
  5. -- Obtener la dependencia a la que se adjudicara el negocio.
  6.   SET codigo_dependencia=fn_getDependencia();
  7.  
  8. END


el llamada lo estoy haciendo de la siguiente forma

Código query:
Ver original
  1. 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