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

Sam*_*Sam 1 mysql parameters stored-procedures where-clause

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

我有一个简单的查询:

SELECT * FROM locations WHERE (ID IN (1, 2, 3, 4, 5));
Run Code Online (Sandbox Code Playgroud)

现在我只是接受了那个查询并将其变成了一个带有LONGTEXT类型参数的存储过程

sp_FetchMultipleLocations(IN argLocations LONGTEXT)
BEGIN
    SELECT * FROM locations WHERE (ID IN (argLocations));
END;
Run Code Online (Sandbox Code Playgroud)

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

CALL sp_FetchMultipleLocations('1, 2, 3, 4, 5');
Run Code Online (Sandbox Code Playgroud)

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

谢谢

Mar*_*c B 6

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

您将不得不使用动态sql,例如在伪代码中:

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