@gevmakarov

Возможно ли в oracle sql объединить JSON массивы, являющиеся записями запроса?

Есть условный запрос:
select item from table
В поле item таблицы table хранится массив объектов в формате JSON.
Подскажите, пожалуйста, есть ли какая-то возможность "схлопнуть" все полученные записи в одно значение - JSON массив, полученный объединением всех массивов, полученных в запросе.
Результат запроса выглядит примерно так:
667c75881cd4b876779056.png
  • Вопрос задан
  • 132 просмотра
Решения вопроса 1
@alexalexes
Смотрите в сторону функции ListAgg - она объединит все значения через разделитель.
Потом останется только обрамить результат в скобки:
select '[' || ListAgg(item, ',') over (order by rownum) || ']'  as item_arr
  from table

PS: ListAgg работает с данными, которые можно привести к varchar/varchar2. То есть, у вас есть физическое ограничение в 4000 символов в результирующей строке. Или у вас данные изначально в BLOB/CLOB.
В этих случаях вам нужно использовать хранимую функцию, поскольку в чистом SQL вы не сможете работать с безразмерными атрибутами.
PPS: А вообще, нужно избавиться от JSON и нормализовать таблицу.
PPPS: Если вы делаете API, то формировать JSON для ответа API - это не функция СУБД, этим должна заниматься прослойка перед СУБД.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы