追加到 ORACLE 中现有 JSON 中的 JSON_ARRAY

问题描述 投票:0回答:1

我正在尝试在 Oracle 19c 中组合 JSON 文档数组。

我想将项目附加到存储在表中的现有 JSON 中的数组。我知道这个问题之前已经以各种形式提出过(演示了辅助函数和 SQL 实现),但我仍然遇到问题,试图通过将数组拆分为行(cross_join_later 方法)或将适当的辅助函数组合在一起来将其组合在一起甲骨文 19c。

我想将值部分组合起来,最终得到这样的结果:

更新_JSON
{“键”:[“VAL1”,“VAL2”,“VAL3”],“值”:[[“1”,“2”,“3”],[“a”,“b”,“c "],["1","b","3"],["2","d","f"],["3","b","g"]]}

还有一个问题:是否也可以按第一项(本例中为 val1)对数组值进行排序?

设置信息:

CREATE TABLE tbl1 (val1 varchar2(10), val2 varchar2(10), val3 varchar2(10));
CREATE TABLE tbl2 (val1 varchar2(10), val2 varchar2(10), val3 varchar2(10));
CREATE TABLE tbl3 (json clob, json_updated clob);
INSERT INTO tbl1 VALUES ('1','2','3');
INSERT INTO tbl1 VALUES ('a','b','c');
INSERT INTO tbl1 VALUES ('1','b','3');
INSERT INTO tbl2 VALUES ('2','d','f');
INSERT INTO tbl2 VALUES ('3','b','g');
insert into tbl3
select json_object(
'keys' : ['VAL1', 'VAL2', 'VAL3'],
'values' : json_arrayagg(json_array(val1, val2, val3 null on null))) as js, null
from tbl1
select json from tbl3
JSON
{“键”:[“VAL1”,“VAL2”,“VAL3”],“值”:[[“1”,“2”,“3”],[“a”,“b”,“c "],["1","b","3"]]}
select json_object(
'keys' : ['VAL1', 'VAL2', 'VAL3'],
'values' : json_arrayagg(json_array(val1, val2, val3 null on null))) as js
from tbl2
JS
{“键”:[“VAL1”,“VAL2”,“VAL3”],“值”:[[“2”,“d”,“f”],[“3”,“b”,“g” “]]}

路径和其他问题的最新尝试:

select *
from   tbl3 t
       CROSS JOIN LATERAL(
         SELECT JSON_ARRAYAGG(value) AS col3
         FROM   (
           SELECT value
           FROM   JSON_TABLE( t.json, '$[*]' COLUMNS value VARCHAR2 PATH '$')
           UNION ALL
           SELECT JSON_OBJECT('values' : json_arrayagg(json_array(val1, val2, val3 null on null))) AS js 
           FROM tbl2
         )
       );

小提琴

json oracle key-value json-arrayagg
1个回答
0
投票

您需要 onlx 来 UNION 两个表 tbl1 和 tbl2 并将其用作 json 的基础

WITH CTE1 AS(
SELECT val1, val2, val3 FROM tbl1
UNION 
SELECT val1, val2, val3 FROM tbl2)
select json_object(
'keys' : ['VAL1', 'VAL2', 'VAL3'],
'values' : json_arrayagg(json_array(val1, val2, val3 null on null))) as js, null
from CTE1
JS
{“键”:[“VAL1”,“VAL2”,“VAL3”],“值”:[[“1”,“2”,“3”],[“a”,“b”,“c "],["1","b","3"],["2","d","f"],["3","b","g"]]}

小提琴

© www.soinside.com 2019 - 2024. All rights reserved.