Как оптимально можно обойти ошибку : ORA-01489: результат строковой конкатенации слишком велик?

На данный момент имею следующую структуру данных таблиц таблицы с запросом.

Конкатенирую значения колонок следующим образом:

select 
    a, b, id, listagg (tst, ' ') within group (order by num asc) res
from one t1
join two t2 on t2.dat = t1.dat
group by a, b, id

На реальных данных сталкиваюсь со следущей ошибкой:

SQL Error [1489] [72000]: ORA-01489: результат строковой конкатенации слишком велик

Подсказжите, как оптимально можно обойти эту ошибку и выполнить конкатенацию?


Результат не желательно обрезать, желательно сохранять результат полного склеивания.
В данном случае, скорость обработки не играет роли, важно сохранить целостность склеивания строк.


Ответы (1 шт):

Автор решения: 0xdb

в данном случае скорость обработки не играет роль важно сохранить целостность склеивания строк

В этом случае подойдёт функция XMLAgg, которая может работать с типом данных CLOB, то есть длина результата практически не ограничена. Неоспоримое преимушество решения - простота, на изменение запроса потратил менее 1 минуты.

Воспроизводимый пример с тестовыми данными из вопроса (db<>fiddle):

select a, b, id, rtrim (
    xmlAgg (xmlElement (e, tst, ' ')
        .extract ('//text()') order by num).getClobVal ()) res
from one t1
join two t2 on t2.dat = t1.dat
group by a, b, id
→ Ссылка