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

Oracle中使用JSON_TABLE解析CLOB存储的复杂JSON时返回多行的问题求助

Oracle中使用JSON_TABLE解析CLOB存储的复杂JSON时返回多行的问题求助

嘿,我完全懂你碰到的麻烦了——用JSON_TABLE解析JSON时跑出了一堆多余的行,这其实是误用NESTED子句导致的笛卡尔积问题!

先看你的JSON结构:c3和c4.c5都是单个JSON对象,不是数组,而NESTED是专门用来处理JSON数组、把数组元素展开成多行的工具。当你对多个非数组的对象用NESTED时,Oracle会把每个NESTED的结果做笛卡尔积组合,自然就出现了那些重复的行。

解决方法超简单:直接用完整路径提取嵌套对象里的值,根本不需要NESTED子句。修改后的SQL如下:

SELECT tabj.*
FROM table_with_clob_column t,
JSON_TABLE(
    t.clob_with_json_file,
    '$' COLUMNS(
        c1 VARCHAR2(100) PATH '$.c1',
        c2 VARCHAR2(100) PATH '$.c2',
        a VARCHAR2(100) PATH '$.c3.a',
        c6 VARCHAR2(100) PATH '$.c4.c5.c6'
    )
) tabj
WHERE t.id = 1;

给你拆解下逻辑:

  • 对于单个JSON对象里的属性,直接用PATH指定完整的JSON路径就能提取值,NESTED完全没必要
  • 这么改之后,JSON_TABLE只会生成一行数据,刚好包含你需要的c1、c2、a、c6四个字段

要是之后碰到JSON数组的场景(比如c3是[{"a":"a1"},{"a":"a2"}]这种),再用NESTED来展开数组元素成多行就对了!

备注:内容来源于stack exchange,提问作者Papa Miky

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 07:09:30