Функция Листагга и ORA-01489: результат конкатенации строк слишком длинный
Когда я запускаю следующий запрос:
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 возвращает следующую ошибку:
ORA-01489: result of string concatenation is too long
Я знаю, что причина этого заключается в том, что функция listagg пытается объединить значения, превышающие 4000 символов, что не поддерживается.
Я видел альтернативный пример, описанный здесь -http://www.oracle-base.com/articles/misc/string-aggregation-techniques.php но все они требуют использования функций или процедур.
Есть ли решение, которое представляет собой чистый SQL без необходимости вызова функции или хранимой процедуры и возможности прочитать значение с использованием стандартного JDBC?
Другая сложность, с которой я столкнулся, состоит в том, что большинство примеров агрегации строк, которые я видел, показывают примеры того, как читать значение как есть. В моем примере о том, что я изменяю значение первым (т.е. я собираю два столбца).