【问题标题】:In Oracle, how can I extract value of XML item in XML column?在 Oracle 中,如何提取 XML 列中 XML 项的值?
【发布时间】:2022-01-21 09:56:03
【问题描述】:

我在 Oracle 表中有 XML 列,其中有这个字符串:

如果存在,我需要提取该字段的值,在上面的示例中它不存在。 在下面的示例中,该值存在:

12345

最好的方法是什么?

谢谢。

【问题讨论】:

    标签: sql xml oracle plsql


    【解决方案1】:

    XMLTABLE 将是一个不错的选择,以这样的方式使用

    SELECT x.*
      FROM xml_tab t,
           XMLTABLE('//Root'
                       PASSING xml_data
                        COLUMNS
                            field1      INT PATH 'field[@name="Text1"]/value',
                            field2      INT PATH 'field[@name="Text2"]/value'
                            ) x  
    

    返回

    FIELD1 FIELD2
    12345

    xml_data 在哪里

    <Root>
      <field name="Text1" type="String">
        <value>12345</value>
      </field>
      <field name="Text2" type="String">
        <value/>
      </field>
    </Root>
    

    Demo

    PS。 EXTRACTVALUE 函数已弃用。它仍然支持向后兼容。但是,Oracle 建议您使用 XMLTABLE 函数,或者改用 XMLCASTXMLQUERY 函数

    【讨论】:

      【解决方案2】:

      如你所说:提取价值

      SQL> with test (col) as
        2    (select '<field name="Text1" type="String"><value>12345</value></field>'
        3     from dual
        4    )
        5  SELECT extractvalue(xmltype(col), '/field/value') result
        6  from test;
      
      RESULT
      ----------------------------------------------------------------------------------------------------
      12345
      
      SQL>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-01-19
        • 2017-07-26
        • 2017-05-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多