Ver Mensaje Individual
  #3 (permalink)  
Antiguo 02/03/2010, 09:45
Bloodsucker
 
Fecha de Ingreso: abril-2009
Mensajes: 13
Antigüedad: 15 años
Puntos: 0
Respuesta: En un procedure: seleccionar un "elemento" (usando algun tipo de loop) de

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Tienes que analizar el tema [URL="http://dev.mysql.com/doc/refman/5.0/es/cursors.html"]CURSORES en MySQL.[/URL]
Eso es lo que tienes que usar.
Hola! gracias por responder. He estado informandome un poco y "esto" es lo que he obtenido.

Parece ser que sería fácil hacerlo si haces la consulta dentro del procedure. Pero no si tu le pasas la "lista" con la que quieres trabajar mediante argumento. He estado este código basandome en el que hay de ejemplo en: http://dev.mysql.com/doc/refman/5.1/en/cursors.html

A ver si tienes mejor idea que yo... :(

Código MySQL:
Ver original
  1. CREATE PROCEDURE curdemo(IN tags VARCHAR(100))
  2. -- recibimos la "lista" ('hola1', 'hola2', 'hola3') por ejemplo.
  3.  
  4. DECLARE alltags CURSOR FOR tags;
  5. -- declaramos el cursor
  6. DECLARE tag VARCHAR(100);
  7. DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
  8.  
  9.   OPEN alltags;
  10. -- Abrimos cursor
  11.  
  12.     FETCH alltags INTO tag; -- para cada elemento del cursor...
  13.     IF NOT done THEN
  14.         SELECT tag; --lo imprimimos por pantalla (por ejemplo)
  15.     END IF;
  16.   UNTIL done END REPEAT;
  17.  
  18.   CLOSE alltags;
  19. -- Cerramos cursor
  20. END//

Un saludo!

EDITO:

Código sin comentarios:
Código MySQL:
Ver original
  1. CREATE PROCEDURE curdemo(IN tags VARCHAR(100))
  2.  
  3. DECLARE alltags CURSOR FOR tags;
  4. DECLARE tag VARCHAR(100);
  5. DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
  6.  
  7.   OPEN alltags;
  8.  
  9.     FETCH alltags INTO tag;
  10.     IF NOT done THEN
  11.         SELECT tag;
  12.     END IF;
  13.   UNTIL done END REPEAT;
  14.  
  15.   CLOSE alltags;
  16. END//

Última edición por Bloodsucker; 02/03/2010 a las 12:15