Función de listagg y ORA-01489: el resultado de la concatenación de cadenas es demasiado largo
Cuando ejecuto la siguiente 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
Oracle devuelve el siguiente error:
ORA-01489: result of string concatenation is too long
Sé que la razón por la que está fallando es que la función listagg está tratando de concatenar los valores que son más de 4000 caracteres que no son compatibles.
He visto el ejemplo alternativo descrito aquí -http://www.oracle-base.com/articles/misc/string-aggregation-techniques.php pero todos requieren el uso de funciones o procedimientos.
¿Existe una solución que sea SQL puro sin tener que llamar a una función o un procedimiento almacenado y poder leer el valor utilizando el JDBC estándar?
La otra dificultad que tengo es que la mayoría de los ejemplos de agregación de cadenas que he visto muestra ejemplos de cómo leer el valor tal como está. En mi ejemplo, estoy modificando el valor primero (es decir, estoy agregando dos columnas).