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

pasar array y crear cursor

Estas en el tema de pasar array y crear cursor en el foro de Mysql en Foros del Web. Estoy intentando pasar una array a un procedimiento almacenado el cual, por medio de un cursor, me devuelva unos subtotales. El caso es que el ...
  #1 (permalink)  
Antiguo 10/03/2014, 10:56
 
Fecha de Ingreso: junio-2013
Mensajes: 13
Antigüedad: 10 años, 10 meses
Puntos: 0
pasar array y crear cursor

Estoy intentando pasar una array a un procedimiento almacenado el cual, por medio de un cursor, me devuelva unos subtotales.

El caso es que el cursor solo me coge el último valor del array que le paso.

He revisado muchas veces el código, pero estoy ofuscado. Agradeceria sugerencias.

Código MySQL:
Ver original
  1.  
  2. DECLARE v_contrato_id int(4);
  3. DECLARE v_ano_an int(4);
  4. DECLARE v_ano_ac int(4);
  5. DECLARE v_enero int(4);
  6.  
  7. DECLARE cur1 CURSOR FOR    select contrato_id,
  8. count(case when  `fecha_cierre`  BETWEEN "2013-01-01" AND "2013-12-31" then 1 else null end ) as ano_an,
  9. count(case when  `fecha_cierre`  BETWEEN "2014-01-01" AND "2014-12-31" then 1 else null end ) as ano_ac,
  10. COUNT(case when `fecha_cierre`  BETWEEN "2014-01-01" AND "2014-01-31" then 1 else null end ) as enero
  11. from 080_acciones
  12. where contrato_id=@currentValue;
  13.  
  14. DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
  15.  
  16. SET @separator = ',';
  17. SET @separatorLength = CHAR_LENGTH(@separator);
  18.  
  19. WHILE _passedArray != '' > 0 DO
  20.     SET @currentValue = SUBSTRING_INDEX(_passedArray, @separator, 1);
  21.         OPEN cur1; 
  22.         read_loop: LOOP
  23.         FETCH  cur1 INTO v_contrato_id, v_ano_an, v_ano_ac,v_enero;
  24.         IF done THEN LEAVE read_loop;       END IF;END LOOP;   
  25.         CLOSE cur1;    
  26.     SET _passedArray = SUBSTRING(_passedArray, CHAR_LENGTH(@currentValue) + @separatorLength + 1);
  27. END WHILE;
  28. Select v_contrato_id, v_ano_an, v_ano_ac,v_enero;

Última edición por gnzsoloyo; 10/03/2014 a las 11:35
  #2 (permalink)  
Antiguo 10/03/2014, 11:36
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: pasar array y crear cursor

Cita:
Estoy intentando pasar una array a un procedimiento almacenado el cual, por medio de un cursor, me devuelva unos subtotales.
No existen los array en MySQL.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 10/03/2014, 12:24
 
Fecha de Ingreso: junio-2013
Mensajes: 13
Antigüedad: 10 años, 10 meses
Puntos: 0
Respuesta: pasar array y crear cursor

ok, reformulo la duda: En realidad estoy pasando un string de ids, separados por comas.
Pretendo que para cada id, haga un select y presente el resultado con cursores.
  #4 (permalink)  
Antiguo 10/03/2014, 17:51
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: pasar array y crear cursor

Finalmente creo que por un lado estás complicando innecesariamente lo que intentas hacer, por otro, tu script tiene demasiados errores como para poder detallártelos todos, muestra un gran desconocimiento del uso de variables, sintaxis propietaria de MySQL, defectos de lógica y de uso de controladores de flujo.
Finalmente, creo que deberías empezar por intentar esto de un modo más simple, ya que el uso de cursores en MySQL es recomendable sólo como recurso absolutamente necesario, y no parece ser el caso.
Yo empezaría con algo simple, como esto:
Código MySQL:
Ver original
  1. delimiter $$
  2. CREATE PROCEDURE proced(IN currentValue VARCHAR(200) )
  3.     SELECT
  4.         contrato_id,
  5.         SUM(IF(YEAR(`fecha_cierre`) = 2013, 1, 0)) ano_an,
  6.         SUM(IF(YEAR(`fecha_cierre`) = 2014, 1, 0)) ano_ac,
  7.         SUM(IF(YEAR(`fecha_cierre`) = 2014 AND MONTH(`fecha_cierre`) = 1, 1, 0)) enero
  8.     FROM `080_acciones`
  9.     WHERE FIND_IN_SET(contrato_id, currentValue )
  10.     GROUP BY contrato_id;
  11.  END$$
  12. delimiter ;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: cursor, null, select
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 10:31.