【发布时间】:2015-01-16 15:45:24
【问题描述】:
我正在使用 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
我们将 LISTAGG() 替换为 XMLAGG() 以避免连接错误。 当我检查两个函数输出的字符长度时,XMLAGG() 给出了一个额外的字符长度。 您能否建议我如何克服这个问题。
请找到下面的sql并输出
XMLAGG():
SELECT TO_CHAR (
SUBSTR (
XMLAGG (XMLELEMENT (e, table_name, CHR (13)).EXTRACT (
'//text()') ORDER BY tablespace_name).GetClobVal (),
1,
2000))
AS str_concate,
LENGTH (
TO_CHAR (
SUBSTR (
XMLAGG (XMLELEMENT (e, table_name, CHR (13)).EXTRACT (
'//text()') ORDER BY tablespace_name).GetClobVal (),
1,
2000)))
AS str_length
FROM all_tables
WHERE table_name = 'TEST_LOAD
输出:
STR_CONCATE STR_LENGTH
TEST_LOAD TEST_LOAD 26
LISTAGG()
SELECT LISTAGG (SUBSTR (table_name, 1, 2000), CHR (13))
WITHIN GROUP (ORDER BY tablespace_name)
AS str_concate,
LENGTH (
LISTAGG (SUBSTR (table_name, 1, 2000), CHR (13))
WITHIN GROUP (ORDER BY tablespace_name))
AS str_length
FROM all_tables
WHERE table_name = 'TEST_LOAD';
输出:
STR_CONCATE STR_LENGTH
TEST_LOAD TEST_LOAD 25
【问题讨论】:
-
用其他字符替换 CHR(13) 并运行查询。您会看到在 XMLAGG 中,该字符被附加在末尾,而在 LISTAGG 中则没有。
-
我在 LISTAGG() 中也有相同的 CHR(13),但它没有给出任何问题
-
我想@Eat Å Peach 建议将 chr(13) 替换为另一个(可见)字符,以向您展示 XMLAGG 在每个 table_name 之后添加此分隔符(甚至在最后一个之后)
-
是的,我删除了 CHR(13) 并检查了 ',' 然后我使用 rtrim(...., ',') 删除了最后一个。与 chr(13) 相同的是:(
标签: oracle11g