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

Oracle 12c解析JSON数组为关系表的正确SQL查询方法

Oracle 12c 解析表内JSON数组为结构化关系表方案

错误原因

之前查询返回null均为JSON路径写法错误:

  • 存储的JSON根节点是数组,不是单个对象,直接用JSON_VALUE(ORDER_DATA, '$.di' )会尝试从根层级找di字段,匹配不到返回null
  • 原有JSON_TABLE语句路径逻辑错误:根节点才是数组,di字段是每个数组元素内的普通数值字段,写'$.di[*]'属于路径层级完全颠倒

正确查询语句

通过JSON_TABLE指定遍历根数组路径,逐个映射对象内字段即可,di字段直接定义精度保留两位小数:

SELECT 
  jt.od,
  jt.md,
  jt.di
FROM order_date j,
JSON_TABLE(
  j.json_order_data,
  '$[*]' COLUMNS (
    od VARCHAR2(10) PATH '$.od',
    md VARCHAR2(10) PATH '$.md',
    di NUMBER(10,2) PATH '$.di'
  )
) jt;

语句说明

  • '$[*]'为JSON遍历根路径,表示遍历根数组下的每一个元素(即每条订单对应的JSON对象)
  • COLUMNS块内的路径是相对于当前遍历到的单个JSON对象,直接用$.字段名即可取到对应值
  • di字段定义为NUMBER(10,2)类型,查询时会自动保留两位小数,满足格式要求
  • Oracle 12c原生支持上述JSON_TABLE语法,不需要额外安装扩展,也不需要使用不兼容的JSON_EXTRACT()函数

查询结果

odmddi
2022-01-012022-01-012.10
2022-02-022022-02-023.10
2022-02-032022-02-034.10

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 17:36:25