gpt4 book ai didi

java - Listagg函数和ORA-01489 : result of string concatenation is too long

转载 作者:搜寻专家 更新时间:2023-10-30 21:30:00 28 4
gpt4 key购买 nike

当我运行以下查询时:

 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 读取值?

我遇到的另一个困难是我见过的大多数字符串聚合示例都显示了如何按原样读取值的示例。在我关于我首先修改值的示例中(即我正在聚合两列)。

最佳答案

您可以使用返回 CLOB 的 xml 函数来执行此操作。 JDBC 应该没问题。

select tm.product_id, 
rtrim(extract(xmlagg(xmlelement(e, tm.book_id || '(' || tm.score || '),')),
'/E/text()').getclobval(), ',')
from tl_product_match tm
where tm.book_id is not null
group by tm.product_id;

例如:http://sqlfiddle.com/#!4/083a2/1

关于java - Listagg函数和ORA-01489 : result of string concatenation is too long,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14864055/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com