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).

questionAnswers(3)

yourAnswerToTheQuestion