You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用->>运算符的SQL存储过程导入phpMyAdmin时出现语法错误

修复MySQL 5.6存储过程中的JSON语法错误

嘿,我瞅了下你写的这个存储过程,导入phpMyAdmin时碰到的语法问题,根源在JSON字段的提取语法上。先把你的原代码贴出来方便分析:

CREATE PROCEDURE `getAssetDetailsforPDF`( ) 
BEGIN 
    Select 
        class.Name as AssetName, 
        getOperatingZoneName( ifnull(getoperatingzone(class.ID), 0) ) as OperatingZone, 
        getTimetoFailure( class.ID ) as TagValue, 
        class1.Name as LineName, 
        details.Defintion ->> '$."Asset ID"' as definition 
    from asset_classification class 
    left join asset_classification class1 on class1.ParentId = 2 
    left join asset_details details on details.Id in( select class.ID ) 
    Where class.MCT_typeId = 5 and class.ParentId in( Select class1.ID ) 
    group by class.Id ; 
END ;

为啥会报错?

你收到的错误提示You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '>'$."Asset ID"',结合你的MySQL 5.6.49-89.0-log版本,问题有两个:

  1. MySQL 5.6根本不支持->>这种JSON字段提取的快捷语法——这个语法是从MySQL 5.7.9才开始引入的,老版本不认它。
  2. 你还写错了字段名:Defintion应该是Definition(少了个字母i),这个虽然不是当前报错的直接原因,但后续肯定会引发字段不存在的问题。

怎么改?

针对MySQL 5.6版本,咱们用原生的JSON_EXTRACT()函数替代->>,同时修正字段拼写:

CREATE PROCEDURE `getAssetDetailsforPDF`( ) 
BEGIN 
    Select 
        class.Name as AssetName, 
        getOperatingZoneName( ifnull(getoperatingzone(class.ID), 0) ) as OperatingZone, 
        getTimetoFailure( class.ID ) as TagValue, 
        class1.Name as LineName, 
        JSON_EXTRACT(details.Definition, '$."Asset ID"') as definition 
    from asset_classification class 
    left join asset_classification class1 on class1.ParentId = 2 
    left join asset_details details on details.Id = class.ID -- 这里的in子查询完全可以简化成直接等于,效率更高
    Where class.MCT_typeId = 5 and class.ParentId in( Select class1.ID ) 
    group by class.Id ; 
END ;

另外提个小优化:details.Id in( select class.ID )这种写法没必要,因为子查询只返回单个值,改成details.Id = class.ID查询会更高效。

额外提示

你的MySQL版本确实比较老了,5.6对JSON的支持很有限,如果之后有机会升级到5.7及以上版本,就能用上->>、JSON_UNQUOTE()这类便捷语法了。

内容的提问来源于stack exchange,提问作者lazzy_ms

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:04:28