MySQL 存储过程在参数中传递数字数组

MySQL stored procedure passing array of number in parameters

我不确定我做错了什么...

我有一个简单的查询:

SELECT * FROM locations WHERE (ID IN (1, 2, 3, 4, 5));

现在我只是把那个查询变成了一个存储过程,参数类型为 LONGTEXT

sp_FetchMultipleLocations(IN argLocations LONGTEXT)
BEGIN
    SELECT * FROM locations WHERE (ID IN (argLocations));
END;

然后我在该参数中调用具有多个值的存储过程:

CALL sp_FetchMultipleLocations('1, 2, 3, 4, 5');

但是 where 子句中的 IN 语句似乎不起作用,它只显示了第一个 (1) 位置...这是为什么?

谢谢

你只需要使用一个分割函数,用逗号分隔即可。

您现在传递它的方式是单个字符串。

参数是一个整体字符串。仅仅因为您在 sproc 内的 IN 子句中使用该参数并不意味着 MySQL 知道它应该将该 csv 字符串拆分为单独的值 - 它不知道 CSV 是什么,也不应该它。

您必须使用动态 sql,例如在伪代码中:

procedure foo(in args longtext)
begin
    sql = concat('SELECT ... WHERE foo IN (', args, ')')
    execute @sql
end

今天在 this page

上找到了这个
SET @c = 'xxx,yyy,zzz';
SELECT * from table 
WHERE FIND_IN_SET(columnname,@c);

适合我。