Ver Mensaje Individual
  #2 (permalink)  
Antiguo 31/05/2009, 07:12
Avatar de huesos52
huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Procedimiento almacenado dinamico

Por lo que entendí del ejemplo, quieres una consulta preparada que ejecute una consulta dependiendo de los parametros de entrada.

si es así, esto te puede servir. (Hice la prueba en una tabla mía)

Código mysql:
Ver original
  1. DELIMITER $$
  2.  
  3. CREATE PROCEDURE `fun`(IN id int, IN tipo integer)
  4.  
  5. #declaro la variable que va ser agregada al query
  6. declare queryy varchar(30);
  7. #si la variable tipo es todos entonces el query se deja en blanco
  8. if tipo = 1 then
  9. set queryy = " ";
  10. #si la variable tipo no es todos entonces se agrega la asignacion
  11. set queryy = concat("where id = ",id);
  12. #se prepara la consulta en una variable;
  13. set @queryy1 = concat("select *from personas ",queryy);
  14. #asignacion de variable a ejecucion
  15. prepare stmt from @queryy1;
  16. execute stmt;
  17. end $$
  18.  
  19. DELIMITER ;

fijate que si es uno, no tiene condición, pero si es diferente de uno, aplica la condición.

Código mysql:
Ver original
  1. mysql> call fun(1,1);
  2. +------+---------------+
  3. | id   | nombre        |
  4. +------+---------------+
  5. |    1 | daniel        |
  6. |    2 | maria daniela |
  7. +------+---------------+
  8. 2 rows in set (0.00 sec)
  9.  
  10. Query OK, 0 rows affected (0.01 sec)
  11.  
  12. mysql> call fun(1,2);
  13. +------+--------+
  14. | id   | nombre |
  15. +------+--------+
  16. |    1 | daniel |
  17. +------+--------+
  18. 1 row in set (0.00 sec)
  19.  
  20. Query OK, 0 rows affected (0.00 sec)

Espero te sirva.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming