如何在MySQL的JSON_EXTRACT函数中使用存储过程参数?
解决MySQL存储过程中使用参数调用JSON_EXTRACT的语法错误
问题分析
你碰到的ERROR 3143 (42000)错误,根源是JSON_EXTRACT的路径参数格式不合法。你试图把固定字符串'$.', attr, '.a11'拆分传递,但JSON_EXTRACT要求第二个参数必须是一个完整的JSON路径字符串,不能用逗号分隔多个片段来拼凑。
正确实现方案
你需要用CONCAT()函数把固定路径片段和输入参数attr拼接成完整的合法JSON路径,修改后的存储过程代码如下:
DROP PROCEDURE IF EXISTS my_procedure; DELIMITER // CREATE PROCEDURE `my_procedure` (IN attr varchar(50)) BEGIN SELECT JSON_EXTRACT(col1, CONCAT('$.', attr, '.a11')) FROM table1; END// DELIMITER ;
验证效果
当你执行call my_procedure('a1');时,CONCAT()会自动把'$.'、'a1'和'.a11'拼接成完整路径'$.a1.a11',这样JSON_EXTRACT就能正确提取到"101"这个目标值了。
额外小技巧
如果你的MySQL版本在5.7.9及以上,还可以用更简洁的**JSON路径运算符->>**来简化写法,代码会更直观:
SELECT col1->>CONCAT('$.', attr, '.a11') FROM table1;
内容的提问来源于stack exchange,提问作者Nikhil Deshpande
相关产品推荐
相关产品推荐

