Как оптимально можно обойти ошибку : 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 шт):
в данном случае скорость обработки не играет роль важно сохранить целостность склеивания строк
В этом случае подойдёт функция 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