2011-09-20 54 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