2011-09-20 51 views
1

我有关于以下代码我使用在制备-执行存储的过程,它的问题:MySQL的动态sql

if(param_cod_empresa_pad='') then 
set @param_cod_empresa_pad=true; 
set @condicion18='and ? '; 
elseif(param_cod_empresa_pad='0') then 
set @param_cod_empresa_pad=null; 
set @condicion18='and pc.cod_empresa_pad is ? '; 
else 
set @param_cod_empresa_pad=param_cod_empresa_pad; 
set @condicion18='and pc.cod_empresa_pad=? '; 
end if; 

当param_cod_empresa_pad =“0”不工作,我有第二个条件

set @param_cod_empresa_pad=true; 
set @condicion18='and pc.cod_empresa_pad is null and ? '; 

有谁知道为什么:它这样​​写?我想知道是否有更好的方法在mysql中使用动态sql调用一个空变量。

我也试过:

set @param_cod_empresa_pad='null'; 
set @condicion18='and pc.cod_empresa_pad is ? '; 

,但没有奏效。

回答

3

您不能使用带参数的is
或者,您可以使用<=>运算符,它是=,它在比较null值时返回true。

null = null -> false 
null <=> null -> true 
1 <=> 1  -> true 
1 <=> 2  -> false 

elseif(param_cod_empresa_pad='0') then 
set @param_cod_empresa_pad=null; 
set @condicion18='and pc.cod_empresa_pad <=> ? '; 
+1

它的工作!非常感谢johan – Eccaos

+0

感谢您的反馈,它是MySQL中隐藏的宝石之一。 – Johan

+0

谢谢,谢谢!今天这帮了我很多。 – bradoaks