Função Listagg e ORA-01489: resultado da concatenação de strings é muito longo
Quando eu executo a seguinte consulta:
Select
tm.product_id,
listagg(tm.book_id || '(' || tm.score || ')',',')
within group (order by tm.product_id) as matches
from
tl_product_match tm
where
tm.book_id is not null
group by
tm.product_id
O Oracle retorna o seguinte erro:
ORA-01489: result of string concatenation is too long
Eu sei que a razão é que a função listagg está tentando concatenar os valores que são maiores que 4000 caracteres, o que não é suportado.
Eu vi o exemplo alternativo descrito aqui -http://www.oracle-base.com/articles/misc/string-aggregation-techniques.php mas todos eles exigem o uso de funções ou procedimentos.
Existe uma solução que é pura SQL sem ter que chamar uma função ou procedimento armazenado e ser capaz de ler o valor usando o padrão JDBC?
A outra dificuldade que eu tenho é que a maioria dos exemplos de agregação de string que vi mostra exemplos de como ler o valor como está. No meu exemplo sobre estou modificando o valor primeiro (ou seja, estou agregando duas colunas).