spo*_*ots 3 sql oracle string-concatenation varchar2 oracle11g
我有一个查询,使用该listagg函数将所有行作为逗号分隔的字符串,最终发送到一个大文本框.我收到以下异常:
ORA-01489: result of string concatenation is too long
我知道问题是正在运行以聚合数据的查询返回了很多行,listagg正在执行的字符串连接违反了4000 char限制.但是,对于我的用例,截断前4000个字符是完全可以接受的.
如何从此处修改此示例查询以将"值"列限制为最多4000个字符?
SELECT LISTAGG(product_name, ', ') WITHIN
GROUP(
ORDER BY product_name DESC) "Product_Listing"
FROM products
你无法substr绕过调用listagg' becauselistagg throws the exception beforesubstr`被调用.
我已经看到很多关于如何绕过4000个字符限制的问题,但不限制结果值.
分析函数可以生成字符串聚合的运行总长度.然后内联视图可以删除长度大于4000的任何值.
在实际查询中,您可能需要向ON OVERFLOW分析函数添加一个,以便仅对某个组进行计数.
select listagg(product_name, ',' on overflow truncate) within group (order by product_name)
from products;
Run Code Online (Sandbox Code Playgroud)
这是一个演示查询的SQL小提琴.
| 归档时间: |
|
| 查看次数: |
29440 次 |
| 最近记录: |