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中的字符串缓冲区太小错误的主要内容,如果未能解决你的问题,请参考以下文章

算法设计中的小错误

尝试使用一堆字符串将反向波兰表示法转换为中缀,遇到一个小错误,我不知道是啥原因造成的

发生点小错误,整了半天

groovy --不注意的小错误(java.lang.String.positive() is applicable)

oracle expdp导出报错“字符串缓冲区太小”

Oracle 数据访问 ORA-06512: 字符串缓冲区太小