![](/img/trans.png)
[英]Extract data from XML Clob using SQL from Oracle Database
[英]Getting XML values from a Oracle CLOB database column
通过使用 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,但在互联网上看到的例子并不多,上面的例子就是这样做的。
有没有人可以解决看起来很简单的事情,但到目前为止我还没有成功。
您可以使用 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
分店名称 |
---|
经纪人地区 |
或者 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 | 分店名称 |
---|---|
13498443 | 经纪人地区 |
在这两种情况下,都必须声明tns
命名空间(除非您使用通配符)。
为亚历克斯普尔的答案添加了另一种选择。 数据库小提琴在这里
SELECT
extractvalue(xmltype(PSX_DOCUMENT),'/AgreementWrapper/Agreement/BranchName',
'xmlns="http://ws.pancredit.com/wsdl"') as Branch_name
from PDI_SUBMITTED_XML;
对于多个值,您可以使用多个提取值。 DB Fiddle在这里
SELECT
extractvalue(
xmltype(PSX_DOCUMENT),
'/AgreementWrapper/Agreement/BranchName',
'xmlns="http://ws.pancredit.com/wsdl"'
) as BRanch_name,
extractvalue(
xmltype(PSX_DOCUMENT),
'/AgreementWrapper/Agreement/AgreementNumber',
'xmlns="http://ws.pancredit.com/wsdl"'
) as AgreementNumber
from
PDI_SUBMITTED_XML;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.