【问题标题】:Getting XML values from a Oracle CLOB database column从 Oracle CLOB 数据库列中获取 XML 值
【发布时间】:2022-07-21 21:40:05
【问题描述】:

通过使用 PL/SQL 或 SQL,我试图从数据库 CLOB 列中提取特定的 XML 值。

Table : PDI_SUBMITTED_XML
(PSX_AGREEMENT  NUMBER(10),
 PSX_DOCUMENT   CLOB)

例如,我试图从实际的 CLOB 内容中提取下面 BranchName 标记中的值“Broker Region”。

<?xml version="1.0" encoding="UTF-8"?>
<tns:AgreementWrapper xmlns:tns="http://ws.pancredit.com/wsdl" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <tns:Agreement>
    <tns:AdminFee>199</tns:AdminFee>
    <tns:AdminFeeFinanced>true</tns:AdminFeeFinanced>
    <tns:Affordability>
      <tns:DownturnReason/>
    </tns:Affordability>
    <tns:AgreementNumber>13498443</tns:AgreementNumber>
    <tns:BankAccountAlreadyValidated>false</tns:BankAccountAlreadyValidated>
    <tns:BankAccountNumber>70872490</tns:BankAccountNumber>
    <tns:BankSortCode>404784</tns:BankSortCode>
    <tns:BranchName>Broker Region</tns:BranchName>
    <tns:BrandName>Rtl - VAT Assist Brand</tns:BrandName>

到目前为止,我还没有找到可以做到这一点的解决方案,有人提到了 XMLPATH,但在互联网上看到的例子不多。

有没有人可以解决看起来很简单但我到目前为止还没有成功的解决方案。

【问题讨论】:

    标签: sql xml oracle plsql text-extraction


    【解决方案1】:

    您可以使用 XMLQuery 获取单个值:

    select xmlquery(
      'declare namespace tns="http://ws.pancredit.com/wsdl";
      /tns:AgreementWrapper/tns:Agreement/tns:BranchName/text()'
      passing xmltype(PSX_DOCUMENT)
      returning content
      ).getstringval() as branch_name
    from PDI_SUBMITTED_XML
    
    BRANCH_NAME
    Broker Region

    如果您需要一次获取多个内容,也可以使用 XMLTable:

    select x.agreement_number, x.branch_name
    from PDI_SUBMITTED_XML
    cross apply xmltable(
      xmlnamespaces('http://ws.pancredit.com/wsdl' as "tns"),
      '/tns:AgreementWrapper/tns:Agreement'
      passing xmltype(PSX_DOCUMENT)
      columns
        agreement_number number path 'tns:AgreementNumber',
        branch_name varchar2(30) path 'tns:BranchName'
    ) x
    
    AGREEMENT_NUMBER BRANCH_NAME
    13498443 Broker Region

    在这两种情况下都必须声明 tns 命名空间(除非您使用通配符)。

    db<>fiddle

    阅读更多关于这些功能的信息in the documentation.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-16
      • 2015-11-21
      • 2017-12-19
      • 2019-07-29
      • 2016-10-16
      • 2017-08-29
      • 2015-07-24
      • 2011-06-20
      相关资源
      最近更新 更多