如何解决Oracle 12c:listagg函数在尝试在SQLdeveloper中使用时无法识别“溢出”子句
我正在尝试使用listagg()函数创建以逗号分隔的文档URL列表,这会导致ORA-01489“字符串连接结果太长”错误。因此,我尝试通过在以下代码段中插入“ on over”子句来纠正此问题:
select distinct
wo_id,listagg(document_id,',' ON OVERFLOW TRUNCATE WITH COUNT)
within group (order by wo_id) over (partition by wo_id) as document_ids
from
(
<...inner SELECT result set...>
)
...但是,当我尝试运行SQL语句时,出现“ ORA-00907缺少右括号”错误-显然是因为SQLdeveloper并不希望在第一组括号内看到“ on”关键字。但是,我所有的Google搜索都表明我的语法正确。有人可以发现我可能在做错什么吗?
解决方法
我怀疑您正在运行Oracle on overflow子句不可用。一种替代方法是使用字符串长度的累积sum()
(以字节为单位),并使用该长度限制输出:
select wo_id,listagg(document_id) within group (order by id) document_ids
from (
select t.*,sum(lengthb(document_id)) over(partitionb by wo_id order by id) sum_len
from mytable t
) t
where sum_lengthb < 4000
group by wo_id
注意:
-
为了使之有意义,您需要一个不同于分区列的排序列;我以为
-
我将外部查询更改为聚合查询;大概这是您的实际意图,而不是窗口聚合和
distinct
id
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。