mysql - 如何在JSON_EXTRACT中使用mysql存储过程参数

标签 mysql mysql-5.7

如何在 JSON_EXTRACT 中使用 mysql 存储过程参数。

表:

SELECT * FROM table1;
col1: {"a1":{"a11":"101","a12":"102"},"a2":{"a22":"201","a23":"202"}}

存储过程代码:

DROP PROCEDURE IF EXISTS my_procedure;
DELIMITER //
CREATE PROCEDURE `my_procedure` (IN attr varchar(50))
BEGIN
  SELECT JSON_EXTRACT(col1, '$.',attr,'.a11') FROM table1;
END//
DELIMITER ;

调用存储过程:

call my_procedure('a1');

错误:

ERROR 3143 (42000): Invalid JSON path expression. The error is around character position 2.

如果我将存储过程代码更改为:

SELECT JSON_EXTRACT(col1, '$.a1.a11') FROM table1; /* this will work*/

但想在存储过程参数中传递JSON_EXTRACT路径。我使用的是mysql 5.7.21 谢谢。

最佳答案

您应该将您的 attr 参数与路径的其余部分进行 CONCAT() 以使其成为有效的路径表达式。

例如

SELECT JSON_EXTRACT(col1, CONCAT("$." , attr, ".a11"));

演示:

https://www.db-fiddle.com/f/pLrpXBpyZCEX6FySvWqiXz/0

关于mysql - 如何在JSON_EXTRACT中使用mysql存储过程参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49390245/

相关文章:

Mysql 查询问题 - 插入选择连接

php - 在 PHP 中使用 INNER JOIN 更新第一列的最小值 LIMIT 1

mysql - 所有记录的空值

mysql - #1305 FUNCTION dbname.json_arrayagg 不存在

php - 如何从记录集中获取数组中的 2 个值

mysql - 连接两个 MySQL 表,但有附加条件?

mysql - 在mysql中填充/加入多对多关系表的多个表

mysql - 在更改 MySQL 中的变量 default_password_lifetime 后,我们是否需要运行刷新权限?

MySQL 实验室 JSON native 类型 : How SUM the result of an array returned by jsn_extract?

mysql - 在 MySQL 5.7.x+ 中重置 'root' 用户密码