Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

ayuda con cursor de procedimiento almacenado

Estas en el tema de ayuda con cursor de procedimiento almacenado en el foro de Mysql en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 07/12/2009, 13:20
 
Fecha de Ingreso: diciembre-2006
Mensajes: 2
Antigüedad: 17 años, 3 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
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:24.