[英]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.