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
我有一个具有以下结构的 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