如何在 JSON_EXTRACT 中使用 mysql 存储过程参数
How to use mysql stored procedure parameter in JSON_EXTRACT
如何在 JSON_EXTRACT 中使用 mysql 存储过程参数。
Table:
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
谢谢。
您应该 CONCAT() 您的 attr
参数与路径的其余部分,以使其成为有效的路径表达式。
例如
SELECT JSON_EXTRACT(col1, CONCAT("$." , attr, ".a11"));
演示:
如何在 JSON_EXTRACT 中使用 mysql 存储过程参数。
Table:
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 谢谢。
您应该 CONCAT() 您的 attr
参数与路径的其余部分,以使其成为有效的路径表达式。
例如
SELECT JSON_EXTRACT(col1, CONCAT("$." , attr, ".a11"));
演示: