Oracle - 将 XML 节点值提取到以分号作为分隔符的列表中

Posted

技术标签:

【中文标题】Oracle - 将 XML 节点值提取到以分号作为分隔符的列表中【英文标题】:Oracle - Extract XML nodes values into a list with semicolon as separators 【发布时间】:2021-09-03 06:17:44 【问题描述】:

我有一个具有以下结构的 XMLType 对象:

<Parameter>
    <Values>
        <Value>abc</Value>
        <Value>def</Value>
        <Value>ghi</Value>
    </Values>
</Parameter>

我想将值提取为以分号作为分隔符的列表

预期的输出是:abc;def;ghi

我尝试了很多我在互联网上找到的方法(尤其是 XMLTable),但找不到适用于我的具体情况的方法。

任何帮助将不胜感激!

提前致谢

【问题讨论】:

【参考方案1】:

你可以使用:

SELECT LISTAGG(x.value, ';') WITHIN GROUP (ORDER BY ROWNUM) AS list
FROM   table_name t
       CROSS JOIN XMLTABLE(
         '/Parameter/Values/Value'
         PASSING XMLTYPE(t.xml)
         COLUMNS
           value VARCHAR2(3) PATH './text()'
       ) x

其中,对于您的示例数据:

CREATE TABLE table_name ( xml ) AS
SELECT '<Parameter>
    <Values>
        <Value>abc</Value>
        <Value>def</Value>
        <Value>ghi</Value>
    </Values>
</Parameter>' FROM DUAL;

哪些输出:

LIST
abc;def;ghi

db小提琴here

【讨论】:

我可以快速将其改编为我自己的代码,并获得了预期的结果。非常感谢您的快速回复!

以上是关于Oracle - 将 XML 节点值提取到以分号作为分隔符的列表中的主要内容,如果未能解决你的问题,请参考以下文章

XML Oracle:多子节点提取

从多个 XML 节点中提取值 [重复]

ORACLE PL SQL 从 SOAP XML 中提取值

具有动态命名空间的 Oracle 提取值

当标签的url部分时如何提取Oracle XML

从 Clob 列中提取 XML 标记值,在 Oracle 中具有多个具有相同名称的标记