Input table :
Create table TEST_TBL(Item varchar2(100),loc varchar2(100), ATTRIBUTE BLOB);
INSERT INTO TEST_TBL('ABC','XYZ',UTL_RAW.CAST_TO_RAW('[{"attribute":[{"attrName":"TEST","attrValue":"REC","attrOperator":"EQUAL","attrOverrideParam":"Priority","attrOverrideValue":0}]}]'));
INSERT INTO TEST_TBL('ABC','XYZ',UTL_RAW.CAST_TO_RAW('[{"attribute":[{"attrName":"TEST1","attrValue":"REC1","attrOperator":"EQUAL","attrOverrideParam":"Priority","attrOverrideValue":0}]}]'));
INSERT INTO TEST_TBL('ABC','XYZ',UTL_RAW.CAST_TO_RAW('[{"attribute":[{"attrName":"TEST2","attrValue":"REC2","attrOperator":"EQUAL","attrOverrideParam":"Priority","attrOverrideValue":0}]}]'));
INSERT INTO TEST_TBL('CDE','WER',UTL_RAW.CAST_TO_RAW('[{"attribute":[{"attrName":"TEST5","attrValue":"REC5","attrOperator":"EQUAL","attrOverrideParam":"Priority","attrOverrideValue":0}]}]'));
INSERT INTO TEST_TBL('CDE','WER',UTL_RAW.CAST_TO_RAW('[{"attribute":[{"attrName":"TEST6","attrValue":"REC6","attrOperator":"EQUAL","attrOverrideParam":"Priority","attrOverrideValue":0}]}]'));
COMMIT;
Desired output would be if item
and loc
combination is same then Attribute
will be concatenated like below:
Output:
INSERT INTO TEST_TBL('ABC','XYZ',UTL_RAW.CAST_TO_RAW('[{"attribute":[{"attrName":"TEST","attrValue":"REC","attrOperator":"EQUAL","attrOverrideParam":"Priority","attrOverrideValue":0}], [{"attrName":"TEST1","attrValue":"REC1","attrOperator":"EQUAL","attrOverrideParam":"Priority","attrOverrideValue":0}], [{"attrName":"TEST2","attrValue":"REC2","attrOperator":"EQUAL","attrOverrideParam":"Priority","attrOverrideValue":0}]}]'));
INSERT INTO TEST_TBL('CDE','WER',UTL_RAW.CAST_TO_RAW('[{"attribute":[{"attrName":"TEST5","attrValue":"REC5","attrOperator":"EQUAL","attrOverrideParam":"Priority","attrOverrideValue":0}], [{"attrName":"TEST6","attrValue":"REC6","attrOperator":"EQUAL","attrOverrideParam":"Priority","attrOverrideValue":0}]}]'));
If you want to display the merged rows then:
SELECT t.item, t.loc,
JSON_ARRAYAGG(j.attr FORMAT JSON) AS attrs
FROM test_tbl t
CROSS APPLY JSON_TABLE(
t.attribute,
'$[*]'
COLUMNS(
attr CLOB FORMAT JSON PATH '$'
)
) j
GROUP BY item, loc
Which, for the sample data:
Create table TEST_TBL(
Item varchar2(100),
loc varchar2(100),
ATTRIBUTE BLOB CHECK (attribute IS JSON)
);
INSERT INTO TEST_TBL (item, loc, attribute) VALUES ('ABC','XYZ',UTL_RAW.CAST_TO_RAW('[{"attribute":[{"attrName":"TEST","attrValue":"REC","attrOperator":"EQUAL","attrOverrideParam":"Priority","attrOverrideValue":0}]}]'));
INSERT INTO TEST_TBL (item, loc, attribute) VALUES ('ABC','XYZ',UTL_RAW.CAST_TO_RAW('[{"attribute":[{"attrName":"TEST1","attrValue":"REC1","attrOperator":"EQUAL","attrOverrideParam":"Priority","attrOverrideValue":0}]}]'));
INSERT INTO TEST_TBL (item, loc, attribute) VALUES ('ABC','XYZ',UTL_RAW.CAST_TO_RAW('[{"attribute":[{"attrName":"TEST2","attrValue":"REC2","attrOperator":"EQUAL","attrOverrideParam":"Priority","attrOverrideValue":0}]}]'));
INSERT INTO TEST_TBL (item, loc, attribute) VALUES ('CDE','WER',UTL_RAW.CAST_TO_RAW('[{"attribute":[{"attrName":"TEST5","attrValue":"REC5","attrOperator":"EQUAL","attrOverrideParam":"Priority","attrOverrideValue":0}]}]'));
INSERT INTO TEST_TBL (item, loc, attribute) VALUES ('CDE','WER',UTL_RAW.CAST_TO_RAW('[{"attribute":[{"attrName":"TEST6","attrValue":"REC6","attrOperator":"EQUAL","attrOverrideParam":"Priority","attrOverrideValue":0}]}]'));
COMMIT;
Outputs:
ITEM | LOC | ATTRS |
---|---|---|
ABC | XYZ | [{"attribute":[{"attrName":"TEST","attrValue":"REC","attrOperator":"EQUAL","attrOverrideParam":"Priority","attrOverrideValue":0}]},{"attribute":[{"attrName":"TEST2","attrValue":"REC2","attrOperator":"EQUAL","attrOverrideParam":"Priority","attrOverrideValue":0}]},{"attribute":[{"attrName":"TEST1","attrValue":"REC1","attrOperator":"EQUAL","attrOverrideParam":"Priority","attrOverrideValue":0}]}] |
CDE | WER | [{"attribute":[{"attrName":"TEST5","attrValue":"REC5","attrOperator":"EQUAL","attrOverrideParam":"Priority","attrOverrideValue":0}]},{"attribute":[{"attrName":"TEST6","attrValue":"REC6","attrOperator":"EQUAL","attrOverrideParam":"Priority","attrOverrideValue":0}]}] |