You need to enable JavaScript to run this app. 如何在MySQL存储过程的JSON字符串中插入动态变量
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 18:45:03