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 originalDELIMITER $$
IN param_cod_tipo_eva
CHAR(1), SET @consulta
= 'SELECT cod_tipo_eva, cod_eva_alm, des_eva_alm FROM tipo_eva_almacen '; SET @condicion
= ' WHERE ';
SET @param_cod_empresa
= param_cod_empresa
; SET @condicion1
= 'cod_empresa=?'; SET @param_cod_tipo_eva
= param_cod_tipo_eva
; SET @condicion2
= 'cod_tipo_eva=?'; SET @param_cod_eva_alm
= param_cod_eva_alm
; SET @condicion3
= 'cod_eva_alm=?'; SET @param_des_eva_alm
= param_des_eva_alm
; SET @condicion4
= 'des_eva_alm=?'; SET @consulta
=CONCAT(@consulta
, @condicion
, ' AND ' ,@condicion1
, ' AND ' ,@condicion2
, ' AND ' ,@condicion3
, ' AND ' ,@condicion4
);
PREPARE consulta
FROM @consulta
; EXECUTE consulta
USING @param_cod_empresa
, @param_cod_tipo_eva
, @param_cod_eva_alm
, @param_des_eva_alm
; DEALLOCATE PREPARE consulta;
DELIMITER ;
Estas cosas, en realidad se resuelven con imaginación, porque no hay método que lo diga...