首批通过分布式安全可靠测评,为关键业务系统打造
执行查询 JSON SQL 报错 the interval is invalid
更新时间:2026-05-26 09:46
问题现象
一个简单的问题场景:
select json_extract(cast('{"data":{}}' as json), '$."data"."a"');
ERROR 5676 (HY000): the interval is invalid
对空 JSON OBJECT 进行尝试访问内部子节点的 JSON PATH SEEK 时,都会发生报错。不限于 json_extract,使用了 JSON PATH 的场景都涉及,例如用于 where 条件中的 JSON PATH:where col1->'$."data"."a"' = '123'。
关键诊断信息
触发条件
对空JSON OBJECT 进行尝试访问内部子节点的 JSON PATH SEEK。
问题原因
JSON PATH SEEK 到一个 json obj 节点时,会计算这个 json obj 节点可访问的 max_offset 防止越界。在处理空 object 的场景时,返回的 max_offset 的值错误导致认为节点不可访问报错。
问题的风险及影响
对空 JSON OBJECT 进行尝试访问内部子节点的 JSON PATH SEEK 动作都会发生失败,可能导致 JSON 查询有关的 SQL 报错失败。
影响租户
影响 OceanBase 数据库中的 SYS 租户和 Oracle 租户以及 MySQL 租户。
影响的版本
OceanBase 数据库 V3.1.2 GA(oceanbase-3.1.2-20210618150922)及之后版本、V3.2.3 GA(oceanbase-3.2.3.0-20220418212020)及之后版本。
解决方法及规避方式
升级至问题已修复版本,目前已修复版本为 OceanBase 数据库 V3.1.2 BP11(oceanbase-3.1.2-111000052023010412)及之后版本、V3.2.3 BP7(oceanbase-3.2.3.3-107000092023011911)及之后版本。