【问题标题】:Extracting XML data using SQL使用 SQL 提取 XML 数据
【发布时间】:2020-07-02 21:05:52
【问题描述】:

在我的示例中,我希望能够使用 Oracle 为名为“Arshad Ali”的客户从 XML 类型中提取特定数据

这是我插入的 xml 数据:

  <Customers>
    <Customer CustomerName="Arshad Ali" CustomerID="C001">
      <Orders>
        <Order OrderDate="2012-07-04T00:00:00" OrderID="10248">
          <OrderDetail Quantity="5" ProductID="10" />
          <OrderDetail Quantity="12" ProductID="11" />
          <OrderDetail Quantity="10" ProductID="42" />
        </Order>
      </Orders>
      <Address> Address line 1, 2, 3</Address>
    </Customer>
    <Customer CustomerName="Paul Henriot" CustomerID="C002">
      <Orders>
        <Order OrderDate="2011-07-04T00:00:00" OrderID="10245">
          <OrderDetail Quantity="12" ProductID="11" />
          <OrderDetail Quantity="10" ProductID="42" />
        </Order>
      </Orders>
      <Address> Address line 5, 6, 7</Address>
    </Customer>
    <Customer CustomerName="Carlos Gonzlez" CustomerID="C003">
      <Orders>
        <Order OrderDate="2012-08-16T00:00:00" OrderID="10283">
          <OrderDetail Quantity="3" ProductID="72" />
        </Order>
      </Orders>
      <Address> Address line 1, 4, 5</Address>
    </Customer>
  </Customers>
</ROOT>

using get clob 我能够提取所有客户。

想知道是否有人可以帮助我为特定客户提取数据.. 尝试使用以下但不成功

SELECT extract(OBJECT_VALUE, '/root/Customers') "customer"
  FROM mytable2
  WHERE existsNode(OBJECT_VALUE, '/customers[CustomerName="Arshad Ali" CustomerID="C001"]')
        = 1;  

【问题讨论】:

    标签: sql xml oracle oracle12c xmltype


    【解决方案1】:

    XML 节点的大小写和确切名称很重要:

    SELECT extract(OBJECT_VALUE,
      '/ROOT/Customers/Customer[@CustomerName="Arshad Ali"][@CustomerID="C001"]') "customer"
    FROM mytable2
    WHERE existsnode (OBJECT_VALUE,
      '/ROOT/Customers/Customer[@CustomerName="Arshad Ali"][@CustomerID="C001"]') = 1
    

    db<>fiddle

    如果您只想按名称搜索,请仅使用该属性:

    SELECT extract(OBJECT_VALUE,
      '/ROOT/Customers/Customer[@CustomerName="Arshad Ali"]') "customer"
    FROM mytable2
    WHERE existsnode (OBJECT_VALUE,
      '/ROOT/Customers/Customer[@CustomerName="Arshad Ali"]') = 1
    

    extract()existsnode() 已被弃用;请改用xmlquery()xmlexists()

    SELECT xmlquery('/ROOT/Customers/Customer[@CustomerName="Arshad Ali"][@CustomerID="C001"]'
      passing object_value
      returning content) "customer"
    FROM mytable2
    WHERE xmlexists('/ROOT/Customers/Customer[@CustomerName="Arshad Ali"][@CustomerID="C001"]'
      passing object_value)
    

    db<>fiddle

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-21
      • 1970-01-01
      • 2017-07-23
      • 2021-05-29
      • 2013-09-26
      • 1970-01-01
      • 2014-01-04
      • 2012-11-16
      相关资源
      最近更新 更多