当我运行以下查询时:
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 读取值?
我遇到的另一个困难是,我见过的大多数字符串聚合示例都显示了如何按原样读取值的示例。在我的示例中,我首先修改了值(即我正在聚合两列)。