mysql动态sql在数据库中的应用

mysql动态sql在数据库中的应用,mysql,sql,dynamic,Mysql,Sql,Dynamic,我想使用以下代码创建sp: select * from document where cod_emp='AAA' and cod_situation in ('01','02','03'); 但我希望('01'、'02'、'03')是一个参数,所以我认为类似的东西可以工作: -- sp's call call sp('"01","02","03"'); -- sp's parameter in param_txt_cod_situation text; -- sp's code se

我想使用以下代码创建sp:

select *
from document
where cod_emp='AAA'
and cod_situation in ('01','02','03');
但我希望('01'、'02'、'03')是一个参数,所以我认为类似的东西可以工作:

-- sp's call

call sp('"01","02","03"');

-- sp's parameter

in param_txt_cod_situation text;

-- sp's code

set @cons1=
'select *
from document
where cod_emp="AAA" ';

if length(param_txt_cod_situation)>0 then
set @param_txt_cod_situation=param_txt_cod_situation;
set @cons2='and cod_situacion in concat("(",?,")") '
else
set @param_txt_cod_situation=true;
set @cons2='and ?';
end if;

set @cons=concat(
@cons1,
@cons2);

prepare cons from @cons;
execute cons using
@param_txt_cod_situation;
deallocate prepare cons;
但它不起作用

希望你们能帮助我。
非常感谢。

函数在任何查询中返回字符串。您不希望看到某个内容是否在字符串中,而是在列表中

替换

set @cons2='and cod_situacion in concat("(",?,")") '


看看这是否管用

什么不管用?它是否按照您的预期工作,或者是否抛出了一个错误?我收到了一个错误。我认为它会像使用like:and cod_situacion like concat(“%”,?,“%”)一样简单。问题是concat返回一个字符串,但in需要一个列表。你应该在过程中连接你的参数,而不是在实际的查询中!非常感谢你的帮助。但是我没有使用“?”而是直接使用了参数。
set @cons2=concat('and cod_situacion in (',?,') ')