MySQL динамический SQL - PullRequest
       9

MySQL динамический SQL

1 голос
/ 20 сентября 2011

У меня есть вопрос по поводу следующего кода, который я использую в хранимой процедуре prepare-execute:

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 ? ';

Кто-нибудь знает почему? Я хотел бы знать, есть ли лучший способ для вызова нулевой переменной с использованием динамического SQL в MySQL.

Я тоже пробовал:

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

но не сработало.

1 Ответ

3 голосов
/ 20 сентября 2011

Вы не можете использовать is с параметрами.
В качестве альтернативы вы можете использовать оператор <=>, который является =, который возвращает true при сравнении значений null.

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 <=> ? ';
...