mysql使用IN动态sql

标签 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

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/

相关文章:

mysql - 仅从 1 行中选择并订购

sql - 在云上选择正确的数据库 Azure SQL

php - MySql SQL 查询 Group by 和 Order by

mysql - 如何在 MySQL 5.7 中的 JSON 数组中获取唯一/不同的元素

c# - 动态转换问题

mysql - 在 MySQL 中连接多个表以获得不相等的值

mysql - C# |如何通过 AWS Lambda 函数调用 MVC 数据访问层

algorithm - 次线性但简单的动态凸包算法?

java - 类似的问题

php - 修改javascript以输出表单名称而不是表单id