Oracle11g 如何删除XMLAGG()输出中的额外字符
Im使用Oracle Database 11g Enterprise Edition 11.2.0.4.0版-64位生产 我们将listag()替换为XMLAGG(),以避免连接错误。 当我从两个函数输出中检查字符的长度时,XMLAGG()会给出一个额外的字符长度。 你能建议我如何克服这个问题吗 请找到下面的sql并输出 XMLAGG(): 输出:Oracle11g 如何删除XMLAGG()输出中的额外字符,oracle11g,Oracle11g,Im使用Oracle Database 11g Enterprise Edition 11.2.0.4.0版-64位生产 我们将listag()替换为XMLAGG(),以避免连接错误。 当我从两个函数输出中检查字符的长度时,XMLAGG()会给出一个额外的字符长度。 你能建议我如何克服这个问题吗 请找到下面的sql并输出 XMLAGG(): 输出: STR_CONCATE STR_LENGTH TEST_LOAD TEST_LOAD
STR_CONCATE STR_LENGTH
TEST_LOAD TEST_LOAD 26
STR_CONCATE STR_LENGTH
TEST_LOAD TEST_LOAD 25
LISTAGG()
输出:
STR_CONCATE STR_LENGTH
TEST_LOAD TEST_LOAD 26
STR_CONCATE STR_LENGTH
TEST_LOAD TEST_LOAD 25
- 在
的情况下,您实际上创建了包含两个子节点的XML树节点:xmlement
和table\u name
。(可能它最终看起来像一个节点,因为两者都是文本,但并不重要。)它是。实质性的问题是节点不知道其他节点,CHR(13)
被添加到每个节点作为其后缀,或者换句话说,终止符CHR(13)
- 对于
,您描述了多个元素的聚合。在本例中,您的listag
充当放置在元素之间的对象。它是分隔符而不是终止符CHR(13)
XMLAGG
不会受到影响,我通常更喜欢XMLAGG
。
如果需要分隔符,我建议在每个值前面加上分隔符,并使用substr
剪切第一次出现的值。在后面加上后缀是可能的,但会使表达式更难表达
substr(
xmlagg(
xmlelement(e','| | table_name).extract('//text()'))
按表空间\u名称排序
).getclobval(),
2.
)
用其他字符替换CHR(13)并运行查询。您将看到,在XMLAGG中,该字符被追加在末尾,而在LISTAGG中则不是。我在Listag()中也有相同的CHR(13),但它不会产生任何问题。我假设@EatÅPeach建议用另一个(可见)字符替换CHR(13),以显示XMLAGG在每个表名称后添加了此分隔符(即使在最后一个之后)是的,我删除了CHR(13)并用“,”进行了检查,然后我使用rtrim(…..,”)删除了最后一个。其中,as samething不与chr(13)一起工作:(