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)位置......为什么会这样?
谢谢
该参数是单个整体字符串.仅仅因为你在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)