我想使用以下代码创建一个 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;
但是没有成功。
希望大家能帮帮我。 非常感谢。
最佳答案
concat
函数在任何查询中都会返回一个字符串。您不想查看字符串中是否有某些内容,而是查看列表中的内容。
替换
set @cons2='and cod_situacion in concat("(",?,")") '
与
set @cons2=concat('and cod_situacion in (',?,') ')
看看是否有效
关于mysql使用IN动态sql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9829414/