Ver Mensaje Individual
  #14 (permalink)  
Antiguo 07/05/2010, 17:02
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Prepare - Execute en SP

Este sería un ejemplo, en el cual la idea es jugar con la lógica.
Cuando pones una condición en el WHERE que simplemente es TRUE, es lo mismo que si no existiera; entonces, si suplantamos el parámetro y su comparación asociada simplemente por el TRUE, el parámetro también desaparecerá...
Mira este caso (aclaro que aún no lo he probado, pero compila):
Código MySQL:
Ver original
  1. DELIMITER $$
  2. DROP PROCEDURE IF EXISTS `TEST`.`inv_sp_tipo_eva_almacen_selectrela2`$$
  3. CREATE PROCEDURE `TEST`.`inv_sp_tipo_eva_almacen_selectrela2`(
  4.   IN param_cod_empresa CHAR(5),
  5.   IN param_cod_tipo_eva CHAR(1),
  6.   IN param_cod_eva_alm CHAR(3),
  7.   IN param_des_eva_alm VARCHAR(50))
  8.   SET @consulta = 'SELECT cod_tipo_eva, cod_eva_alm, des_eva_alm FROM tipo_eva_almacen ';
  9.   SET @condicion =  ' WHERE ';
  10.  
  11.   IF TRIM(param_cod_empresa) != '' THEN
  12.     SET @param_cod_empresa = param_cod_empresa;
  13.     SET @condicion1 = 'cod_empresa=?';
  14.   ELSE
  15.     SET @param_cod_empresa = TRUE;
  16.     SET @condicion1 = '?';
  17.   END IF;
  18.   IF TRIM(param_cod_tipo_eva) != '' THEN
  19.     SET @param_cod_tipo_eva = param_cod_tipo_eva;
  20.     SET @condicion2 = 'cod_tipo_eva=?';
  21.   ELSE
  22.     SET @param_cod_tipo_eva = TRUE;
  23.     SET @condicion2 = '?';
  24.   END IF;
  25.   IF TRIM(param_cod_eva_alm) != '' THEN
  26.     SET @param_cod_eva_alm = param_cod_eva_alm;
  27.     SET @condicion3 = 'cod_eva_alm=?';
  28.   ELSE
  29.     SET @param_cod_eva_alm = TRUE;
  30.     SET @condicion3 = '?';
  31.   END IF;
  32.   IF TRIM(param_des_eva_alm) != '' THEN
  33.     SET @param_des_eva_alm = param_des_eva_alm;
  34.     SET @condicion4 = 'des_eva_alm=?';
  35.   ELSE
  36.     SET @param_des_eva_alm = TRUE;
  37.     SET @condicion4 = '?';
  38.   END IF;
  39.   SET @consulta=CONCAT(@consulta, @condicion, ' AND ' ,@condicion1, ' AND ' ,@condicion2, ' AND ' ,@condicion3, ' AND ' ,@condicion4);
  40.  
  41.   PREPARE consulta FROM @consulta;
  42.   EXECUTE consulta USING @param_cod_empresa, @param_cod_tipo_eva, @param_cod_eva_alm, @param_des_eva_alm;
  43.   DEALLOCATE PREPARE consulta;
  44. END$$
  45. DELIMITER ;

Estas cosas, en realidad se resuelven con imaginación, porque no hay método que lo diga...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)