【问题标题】:Oracle XML query returns NULLOracle XML 查询返回 NULL
【发布时间】:2019-09-13 19:37:48
【问题描述】:

我需要将 XML 数据转换为字段/值对,但我对值的查询返回空值

我在 Oracle 中有一个 XML 类型列,我试图解析它以获取字段/值对。我不确定 XML 的结构是否是原因,但我无法提取该值。

这是 XML 数据的示例:

<SaleFile BRANCH_ID="ABCZ7" name="FILE20190523_BN0016_MAIN.DAT" File_Type="MAIN" id="574455888ABCYY7" type="ACCOUNT">
    <FIELD Type="ACCOUNT BALANCES AND CORRESPONDING DATES" Redact_ind="FALSE"  Name="POSTED_PMT_AMT">-673.00</FIELD>
    <FIELD Type="CONSUMER CONTACT INFORMATION" Redact_ind="FALSE" Name="SECONDARY CUSTOMER">N</FIELD>
    <FIELD Type="CONSUMER IDENTIFYING INFORMATION" Redact_ind="FALSE" Name="SECONDARY CUSTOMER NAME"></FIELD>
</SaleFile>

我正在尝试获取我的查询中返回的过帐金额。

SELECT xt.*
FROM SALES_DATA x,
     XMLTABLE('/SaleFile/FIELD'
     PASSING x.SELLER_DATA
     COLUMNS 
       FIELD_VAL VARCHAR2(500) PATH 'FIELD'
     ) xt

查询运行没有错误,但我得到的只是NULLs。

【问题讨论】:

  • Oracle DB的版本是多少?

标签: sql xml oracle


【解决方案1】:

考虑在 XPath 表达式中使用 xmlSequenceextractValue() 的不同方法:

select
    extractValue(value(e), '//FIELD[@Type=''ACCOUNT BALANCES AND CORRESPONDING DATES'']') AS "amount"
from SALES_DATA x,
    table (xmlSequence(extract(xml, '/SaleFile'))) e

Rextester Demo

【讨论】:

    【解决方案2】:

    通过尝试一些不同的代码来解决:

    从 SALES_DATA x 中选择 xt.*, XMLTABLE('/SaleFile/FIELD' 传递 x.Seller_DATA 列 FIELD_VAL VARCHAR2(500) PATH '/' ) xt

    这给了我每个 FIELD 节点的值列表。

    【讨论】:

    • 您说“...我正在尝试获取已发布的金额...”,即一个单一的值。
    【解决方案3】:

    您的 FIELD 元素很少,因此基于 Name="POSTED_PMT_AMT" 属性的过滤器会很有帮助。

    SQL

    SELECT xt.*
    FROM SALES_DATA x,
         XMLTABLE('/SaleFile/FIELD[@Name="POSTED_PMT_AMT"]'
         PASSING x.SELLER_DATA
         COLUMNS 
           PMT_AMT NUMERIC(10,2) PATH './text()'
         ) xt   
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-02
      • 2013-04-28
      • 2019-06-14
      • 2020-01-07
      • 2015-11-12
      相关资源
      最近更新 更多