【问题标题】:Oracle query using Xpath to get comma separated List for same nodeOracle 查询使用 Xpath 获取同一节点的逗号分隔列表
【发布时间】:2026-01-27 03:20:25
【问题描述】:

大家好, 如果 XML 节点中存在,我需要帮助来获取同一节点的逗号分隔列表。 我的 XML 是这样的,它存储在我的数据库中:-

<Event>
    <Detail>
        <List>
            <Element>
                <name>ABC</name>
                <salary>150</salary>
            </Element>
            <Element>
                <name>PQR</name>
                <salary>250</salary>
            </Element>
        </List>
    </Detail>
</Event>

我需要使用 xpath oracle 查询从中获取逗号分隔的名称列表 (ABC,PQR)。 我已经尝试了很多,当我得到这样的方法时:-

NVL(VALUE (line).EXTRACT ('/Event/Detail/List/Element/name/text()') .getstringval (),'') Name List 

然后,我的输出是 ABCPQR。

那里没有空格或逗号。谁能帮我解决这个问题。

预期输出为:- ABC,PQR

提前致谢:)

【问题讨论】:

    标签: sql xml oracle xpath oracle11g


    【解决方案1】:

    您正在从 XML 文档中提取值列表,而不是单个值,因此我认为您最好使用 XMLTABLE 将它们全部选择到表中,然后使用 @987654322 将它们连接在一起@。

    这是一个例子:

    SQL> CREATE TABLE xmltest (id INTEGER, x XMLTYPE);
    
    Table created.
    
    SQL> INSERT INTO xmltest (id, x) VALUES (1, XMLTYPE('<Event>
      2      <Detail>
      3          <List>
      4              <Element>
      5                  <name>ABC</name>
      6                  <salary>150</salary>
      7              </Element>
      8              <Element>
      9                  <name>PQR</name>
     10                  <salary>250</salary>
     11              </Element>
     12          </List>
     13      </Detail>
     14  </Event>'));
    
    1 row created.
    
    SQL> COMMIT;
    
    Commit complete.
    
    SQL> SELECT t.id, LISTAGG(y.name, ',') WITHIN GROUP (ORDER BY ROWNUM)
      2    FROM xmltest t,
      3         XMLTABLE('//Element' PASSING t.x COLUMNS name VARCHAR2(1000) PATH 'name') y
      4   GROUP BY t.id;
    
            ID
    ----------
    LISTAGG(Y.NAME,',')WITHINGROUP(ORDERBYROWNUM)
    --------------------------------------------------------------------------------
             1
    ABC,PQR
    

    XPath 2.0 中有一个函数string-join,它将字符串值与逗号连接在一起。这似乎正是您所需要的,但可惜 Oracle 似乎不支持它。

    【讨论】: