【问题标题】:How to Extract clob XML attribute name list from oracle如何从 oracle 中提取 clob XML 属性名称列表
【发布时间】:2016-05-27 15:59:37
【问题描述】:

我需要通过从oracle 11g 中的clob 数据中提取xml 元素名称来进行报告。产品表将其属性存储为 clob XML,其中可以存储多个属性。以以下格式存储的值:

200.0Manufacturer1235/V

这里我需要一份报告,其中应包含诸如 Rebate、SellerOwnerID、SellerOwnerValue 等属性名称。我可以提取 clob 数据,但我不知道如何获取属性名称列表。

【问题讨论】:

  • 没有以正确的方式显示 XML,所以我已经上传了图片。
  • 请给我样本 xml
  • 200.0制造商1235/V

标签: xml oracle oracle11g clob


【解决方案1】:

执行以下查询以获得所需的输出

SELECT EXTRACTVALUE (COLUMN_VALUE, '/attr/@name') attribute,
       EXTRACTVALUE (COLUMN_VALUE, '/attr/double') double,
       EXTRACTVALUE (COLUMN_VALUE, '/attr/string') string
  FROM TABLE(XMLSEQUENCE(EXTRACT(XMLTYPE('<attrs><attr name="Rebate"><double>200.0</double></attr><attr name="SellerOwnerID"><string>Manufacturer</string></attr><attr name="SellerOwnerValue"><string>1235/V</string></attr></attrs>'),'/attrs/attr')))

【讨论】:

  • 感谢 Dinesh,以这种方式编写查询存在问题。我将解释复杂性。表名产品列名属性。列属性可以存储具有多个属性的 XML,这不是固定的。对于我附加的示例,它具有 3 个属性,但其他产品可以具有 40-50 个属性。我们可以写一些通用的东西吗?
  • 你能分享一下那个复杂的xml吗
  • 我附加的 XML 是从 DB clob 列中提取的。实际的 XML 具有不同的结构集。当我们处理产品 XML 时,我们以附加的 XML 格式保存产品属性。只是为了另一个例子,我附上了来自不同产品的另一个样本。
  • 100.0(截至 2014 年 7 月 20 日) 法律制造商制造商Q​​Q1234Q​​Q1235 449.0家庭办公室,工作组
  • XMLSEQUENCE 已弃用,Oracle 建议您使用 XMLTABLE
【解决方案2】:
with abc as ( select * from  
(select 'Prod1' prod_name,xmltype('<attrs><attr name="Rebate"><double>200.0</double></attr><attr name="SellerOwnerID"><string>Manufacturer</string></attr><attr name="SellerOwnerValue"><string>1235/V</string></attr></attrs>') xxx from dual
union all 
select 'Prod2',xmltype('<attrs><attr name="Rebate"><double>200.0</double></attr><attr name="SellerOwnerID"><string>Manufacturer</string></attr><attr name="SellerOwnerValue"><string>1235/V</string></attr><attr name="Rebate"><double>200.0</double></attr><attr name="SellerOwnerID"><string>Manufacturer</string></attr><attr name="SellerOwnerValue"><string>1235/V</string></attr></attrs>') from dual
))
select prod_name,attr_name,attr_type,attr_value from abc,xmltable('attrs/attr'
                passing  abc.xxx
                columns
                    attr_name varchar2(30) path '@name',
                    attr_type varchar2(30) path '*/name()',
                    attr_value varchar2(30) path '*/text()'
                      );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-29
    • 2015-11-21
    • 1970-01-01
    • 2015-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多