【问题标题】:oracle xml parsing with multi rowsoracle xml解析多行
【发布时间】:2019-04-11 12:17:25
【问题描述】:

从 xml 查询不返回行。

我运行此查询但不返回行。

我的 xml 是:

<?xml version="1.0" encoding="UTF-8"?>
<ns0:testata xmlns:ns0="http://siete">
  <ns0:product>
    <ns0:YEAR>2019</ns0:YEAR>
    <ns0:PERIOD>1</ns0:PERIOD>
  </ns0:product>
  <ns0:product>
    <ns0:YEAR>2019</ns0:YEAR>
    <ns0:PERIOD>2</ns0:PERIOD>
  </ns0:product>
</ns0:testata>

我的查询是

FROM XMLTABLE('/testata/product'  
         PASSING   
              (select  xmltype(t.XML1) doc
                 from tb_test t)
         COLUMNS  
             name  varchar2(4)    PATH './YEAR'
     ) xmlt   

0 行

请帮帮我

【问题讨论】:

    标签: oracle xmltype


    【解决方案1】:

    您的 XML 文档有一个命名空间,因此您需要在 XMLTable 调用中对节点进行通配符,或者 - 最好 - 提供相同的命名空间信息和前缀:

    -- CTE for sample data
    with tb_test (xml1) as (select '<?xml version="1.0" encoding="UTF-8"?>
    <ns0:testata xmlns:ns0="http://siete">
      <ns0:product>
        <ns0:YEAR>2019</ns0:YEAR>
        <ns0:PERIOD>1</ns0:PERIOD>
      </ns0:product>
      <ns0:product>
        <ns0:YEAR>2019</ns0:YEAR>
        <ns0:PERIOD>2</ns0:PERIOD>
      </ns0:product>
    </ns0:testata>' from dual
    )
    -- actual query
    select x.year
    from tb_test t
    cross join xmltable(
      xmlnamespaces('http://siete' as "ns0"),
      '/ns0:testata/ns0:product'
      passing xmltype(t.xml1)
      columns year number path 'ns0:YEAR'
    ) x;
    
          YEAR
    ----------
          2019
          2019
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-01
      • 2019-02-02
      • 2020-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-21
      • 1970-01-01
      相关资源
      最近更新 更多