如何在MySQL存储过程的JSON字符串中插入动态变量
MySQL存储过程构造JSON输出参数实现方案
你预期的JSON格式存在语法错误,多了冗余的左大括号且Count2缺少闭合引号,合法的目标格式应为{"Count1": 79, "Count2": 50},以下是正确实现:
方案1:使用MySQL内置JSON函数(推荐,MySQL 5.7+支持)
直接使用JSON_OBJECT()函数自动构造合法JSON,无需手动处理字符串拼接和转义:
CREATE DEFINER=`root`@`localhost` PROCEDURE `new_procedure1`( OUT `res_json` VARCHAR(50) -- try是MySQL保留关键字,建议改为其他名称,坚持使用需加反引号包裹 ) BEGIN -- 直接将两个计数结果传入JSON_OBJECT构造JSON SET res_json = JSON_OBJECT( 'Count1', (SELECT COUNT(*) FROM book.books), 'Count2', (SELECT COUNT(*) FROM book.authors) ); END
方案2:手动拼接字符串(适配MySQL 5.7以下版本)
如果你的数据库版本不支持JSON函数,可以用CONCAT()手动拼接:
CREATE DEFINER=`root`@`localhost` PROCEDURE `new_procedure1`( OUT `res_json` VARCHAR(50) ) BEGIN DECLARE var1 INT DEFAULT 0; DECLARE var2 INT DEFAULT 0; SELECT COUNT(*) INTO var1 FROM book.books; SELECT COUNT(*) INTO var2 FROM book.authors; SET res_json = CONCAT('{"Count1": ', var1, ', "Count2": ', var2, '}'); END
核心修改点说明
- 移除了错误的直接写大括号构造JSON的语法,MySQL不支持直接在语句中写JSON字面量赋值
- 修正了JSON结构错误,删除了多余的左大括号,补全了Count2的引号
- 优先使用内置JSON函数保证输出的JSON格式合法性,避免手动拼接可能出现的语法错误
- 替换了作为输出参数名的保留关键字
try,避免执行报错
内容的提问来源于stack exchange,提问作者Cat_Coder
相关产品推荐
相关产品推荐

