Oracle中的字符串缓冲区太小错误
Posted
技术标签:
【中文标题】Oracle中的字符串缓冲区太小错误【英文标题】:Character string buffer too small error in Oracle 【发布时间】:2016-12-02 03:29:45 【问题描述】:我的表有以下数据
Username Groupname
-------- ---------------
A MAXADMIN
A BUYER
B PURCHASEMANAGER
B FINANCECLERK
输出应该如下所示
Username Groupname
-------- ----------------------------
A MAXADMIN,BUYER
B PURCHASEMANAGER,FINANCECLERK
我收到一个错误ORA-19011: character string buffer too small.
在此先感谢
select maxuser.userid,
person.displayname,
maxuser.status,
sod_Report.severity,
sod_Report.scenario,
RTRIM (XMLAGG (XMLELEMENT (e, groupuser.groupname || ',')).EXTRACT ('//text()'),',') groupname
from maxuser,
person,
groupuser,
sod_report
where maxuser.userid=person.personid
and groupuser.userid = maxuser.userid
and sod_report.userid= maxuser.userid
group by maxuser.userid,
person.displayname,
maxuser.status,
sod_Report.severity,
sod_Report.scenario
【问题讨论】:
谁知道?您是否制定了解释计划? 看看LISTAGG。也许没有必要从一个字符串中生成一个 XML,然后再从这个 XML 中提取字符串。 LISTAGG 确实有效,非常感谢! 【参考方案1】:错误信息是自我描述的。
19011, 00000, "字符串缓冲区太小"
原因:请求的字符串结果太大无法返回
动作:将结果改为吊球
您需要使用DBMS_LOB
包来检索XMLTYPE
数据表。
这是一个示例,它解释了如何将结果作为 LOB 获取。
ORA-19011: Character string buffer too small
【讨论】:
【参考方案2】:如果我们需要使用超过 4000 个字符,我们可以使用以下函数 -
select maxuser.userid,
person.displayname,
maxuser.status,
sod_Report.severity,
sod_Report.scenario,
RTRIM (XMLAGG (XMLELEMENT (e, groupuser.groupname || ',')).EXTRACT ('//text()').getClobVal(),',') groupname
.....
【讨论】:
以上是关于Oracle中的字符串缓冲区太小错误的主要内容,如果未能解决你的问题,请参考以下文章
尝试使用一堆字符串将反向波兰表示法转换为中缀,遇到一个小错误,我不知道是啥原因造成的