它appears表明MySQL没有数组变量。我应该用什么来代替呢?
似乎提出了两种替代方案:集合型标量和临时表。我链接到的问题表明是前者。但是,使用这些变量而不是数组变量是一种好的做法吗?或者,如果我使用集合,基于集合的习惯用法是什么,等同于foreach
发布于 2012-12-22 04:24:30
我一直在使用临时表,而不是数组变量。这不是最好的解决方案,但它是有效的。
请注意,您不需要正式定义它们的字段,只需使用SELECT创建它们:
DROP TEMPORARY TABLE IF EXISTS my_temp_table;
CREATE TEMPORARY TABLE my_temp_table
SELECT first_name FROM people WHERE last_name = 'Smith';
(另请参阅Create temporary table from select statement without using Create Table。)
发布于 2012-08-29 19:24:10
您可以使用WHILE
循环在MySQL中实现这一点:
SET @myArrayOfValue = '2,5,2,23,6,';
WHILE (LOCATE(',', @myArrayOfValue) > 0)
DO
SET @value = ELT(1, @myArrayOfValue);
SET @myArrayOfValue= SUBSTRING(@myArrayOfValue, LOCATE(',',@myArrayOfValue) + 1);
INSERT INTO `EXEMPLE` VALUES(@value, 'hello');
END WHILE;
编辑:或者,您可以使用UNION ALL
进行编辑
INSERT INTO `EXEMPLE`
(
`value`, `message`
)
(
SELECT 2 AS `value`, 'hello' AS `message`
UNION ALL
SELECT 5 AS `value`, 'hello' AS `message`
UNION ALL
SELECT 2 AS `value`, 'hello' AS `message`
UNION ALL
...
);
发布于 2017-02-14 17:15:54
尝试使用MySql的FIND_IN_SET()函数,例如
SET @c = 'xxx,yyy,zzz';
SELECT * from countries
WHERE FIND_IN_SET(countryname,@c);
注意:如果要传递带有CSV值的参数,则不必在StoredProcedure中设置变量。
https://stackoverflow.com/questions/12176709
复制相似问题