【问题标题】:Why am I hitting a limit when using XMLAGG with an associative array?为什么在将 XMLAGG 与关联数组一起使用时会遇到限制?
【发布时间】:2014-07-26 18:55:31
【问题描述】:

注意,我的问题太长了,所以我贴了代码here

这是在 Oracle 11gR2 上。这个问题涉及使用 XMLAGG 连接在关联数组上运行的查询的输出。 这是我最近提出的另外两个问题的后续:Is Oracle's EXTRACT function breaking the NOENTITYESCAPING in the XMLELEMENT?What data structure to use in order to sort this data in PL/SQL?

如果你运行上面粘贴 bin 链接中的代码,你会得到美妙的 ORA-06502: PL/SQL: numeric or value error,但是如果你注释掉以开头的行sorting_table(578),代码运行良好(返回一个很长的串联字符串)。显然它达到了某种内部 Oracle 限制,但我对它是什么感到困惑。我的理解是这里涉及的所有数据类型都是 CLOBS,这是不正确的吗?推荐的解决方法是什么?

select xmlagg(xmlelement(e,stringval, valueSeparator).extract('//text()') order by upper(intval)).GetClobVal()
  into lv_value
  from table(sorting_table);

【问题讨论】:

  • 它在 11gR1 上对我有用。奇怪。
  • 您使用OBJECT TYPENESTED TABLE 而不是将所有内容放入简单 表中是否有特定原因?
  • @Wernfried,在链接的问题中有解释。但它实际上并不是一个嵌套表。
  • @OldProgrammer,谢谢,知道这非常有用。我必须尝试找到一个 11gR1 版本进行测试。

标签: xml oracle plsql oracle11g associative-array


【解决方案1】:

好的,好消息是,这不是由 SQL 引起的:它是随后的 DBMS_OUTPUT 调用失败,因为它在该行被注释掉时运行:

589
590       -- DBMS_OUTPUT.put_line('lv_value='||lv_value);
591*     END;

PL/SQL procedure successfully completed.

SQL> @monster_xml
    DECLARE
*
ERROR at line 1:
ORA-06502: PL/SQL: numeric or value error
ORA-06512: at line 590

SQL> 

现在,根据文档,maximum line size is 32767。我更正了 DBMS_OUTPUT 调用以显示字符串的长度,它就在其中:

SQL>  @monster_xml
lv_value=32707

PL/SQL procedure successfully completed.

SQL> 

所以看起来您可能在 11gR2 的 DBMS_OUTPUT 中遇到了 Oracle 错误。

【讨论】:

  • 哇哦,非常感谢!我从来没有想过 DBMS_OUTPUT 可能是问题所在。再次感谢。
猜你喜欢
  • 1970-01-01
  • 2014-09-19
  • 1970-01-01
  • 2014-03-20
  • 2014-02-13
  • 1970-01-01
  • 2013-12-21
  • 1970-01-01
  • 2013-03-27
相关资源
最近更新 更多