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

Oracle - Extract XML nodes values into a list with semicolon as separators

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

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

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

预期输出为:abc;def;ghi

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

如有任何帮助,我们将不胜感激!

提前致谢

您可以使用:

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<>fiddle here