我使用MySQL8.0并尝试使用JSON_VALUE来处理存储过程中的数组
CREATE PROCEDURE `tJS` ()
BEGIN
DECLARE _counter INT DEFAULT 0;
SET @arr = '["123","3","15"]';
WHILE _counter < JSON_LENGTH(@arr) DO
--here I want extract element with index _counter from @arr
SET @ix = CONCAT('$[', _counter, ']') ;
SET @v = JSON_VALUE(@arr, @ix);
-- some stuff with @v must be here
END WHILE;
END
我在SET @v = JSON_VALUE(@arr,@ix)行得到错误:
- “您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以获得在'@ix)附近使用的正确语法;“*
正如我发现的,在MySQL 8中,JSON_VALUE只在path(第二个参数)是固定字符串而不是变量时才起作用。
所以,这个命令是有效的:
SET @v = JSON_VALUE(@arr, '$[0]')
此命令会抛出相同的语法错误:
SET @v = JSON_VALUE(@arr, CONCAT('$[', _counter, ']'));
在MySQL 8.0中有没有办法将JSON_VALUE中的第二个参数设置为变量,而不是固定的字符串?
2条答案
按热度按时间l7wslrjt1#
https://dev.mysql.com/doc/refman/8.0/en/json-search-functions.html#function_json-value 说:
path
是指向文档中位置的JSON路径。必须是字符串文字值这。所以答案是否定的,你不能用变量代替路径。
在准备SQL查询字符串之前,将路径表达式连接到SQL查询字符串中,然后可以使用PREPARE and EXECUTE运行动态SQL查询。
但我认为你的方法是不可取的,原因有几个:
6tqwzwtp2#
下面是一个从JSON数组中获取第一项的快速示例:
下面是一个更长的示例,它创建了一个测试表并从JSON数组中插入了三个值。