Oracle 19.2.1.247从CLOB字段提取JSON的Message-ID报错求助
解决Oracle 19c提取带连字符JSON键值的语法错误问题
错误原因
- JSON路径解析逻辑问题:JSON键名
Message-ID包含连字符,Oracle的JSON路径解析器会把$.Message-ID误判为$.Message减去ID的表达式,直接触发JZN-00209语法错误。 - 字段引用错误:原SQL中
JSON_VALUE的第一个参数写了'{header_info}',这是固定字符串,不是引用表中的CLOB类型字段header_info。
正确SQL写法
有两种合法方式可以解析带特殊字符的JSON键:
方式1:用双引号包裹键名
SELECT JSON_VALUE(header_info, '$."Message-ID"') AS message_id FROM epres.mydata;
方式2:使用方括号语法
SELECT JSON_VALUE(header_info, '$["Message-ID"]') AS message_id FROM epres.mydata;
额外优化(可选)
如果header_info字段可能存在非JSON格式的数据,可以添加异常处理子句控制结果:
-- 非法JSON时返回NULL SELECT JSON_VALUE(header_info, '$."Message-ID"' NULL ON ERROR) AS message_id FROM epres.mydata; -- 非法JSON时抛出错误 SELECT JSON_VALUE(header_info, '$."Message-ID"' ERROR ON ERROR) AS message_id FROM epres.mydata;
内容的提问来源于stack exchange,提问作者Meir
相关产品推荐
相关产品推荐

