问题类型:功能使用

关键词:listagg、字符串拼接、YAS-02511

问题描述

在 SQL 查询中使用 listagg 函数对多行字符串进行拼接时,若拼接后的总长度超过 8000 字节,会报如下错误:

YAS-02511: result of string concatenation value exceeds maximum length of 8000 characters

原因分析

listagg 的拼接结果包括表达式与分隔符,合计不能超过 8000 字节。当拼接内容过长时将发生溢出,触发错误。

应对策略

可以使用 on overflow 子句来规避错误并控制输出行为:

on overflow error:默认行为,溢出时报错。

on overflow truncate '标志':发生溢出时截断输出,并添加自定义终止符。

with count:在终止符后附加拼接记录数,如 on overflow truncate '*' with count,系统会保留 26 个字节空间用于“终止标志+拼接条数”。

without count:仅截断输出,添加终止符但不显示被截断行数。

示例语法:

select listagg(col, ',') within group(order by id)
on overflow truncate '...' with count
from my_table;

适用版本

YashanDB 23.2.3.100


数据库砖家
1 声望0 粉丝