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
相关产品推荐
相关产品推荐

