應該優選使用XMLTABLE作爲對extractValue是deprecate d
這裏的示例選擇與(規格化)parten屬性TEH端口。 我也添加了posr序列來保存端口的順序。
WITH t AS
(SELECT xmltype('<?xml version="1.0" encoding="UTF-8"?>
<Reporting>
<Selection>69</Selection>
<MonthEndDate>9/30/2016</MonthEndDate>
<Email>
<Name>abc</Name>
<Address>[email protected]</Address>
</Email>
<Request>
<Port_id_list>
<Port_id>1901</Port_id>
<Port_id>1902</Port_id>
<Port_id>1903</Port_id>
</Port_id_list>
</Request>
</Reporting>') xml
FROM dual)
select
x.Selection,x.MonthEndDate,x.emailName, x.emailAddress,
o.port_seq, o.port_id
from t,
XMLTable(
'for $i in /Reporting
return $i'
passing t.xml
columns
Selection varchar2(30) path 'Selection',
MonthEndDate varchar2(30) path 'MonthEndDate',
emailName varchar2(30) path 'Email/Name',
emailAddress varchar2(30) path 'Email/Address',
Port_id_list XMLType path '//Port_id'
) x,
XMLTable(
'./Port_id'
passing (x.Port_id_list)
columns
port_seq for ordinality,
port_id varchar2(30) path '/Port_id'
) o
;
SELECTION MONTHENDDATE EMAILNAME EMAILADDRESS PORT_SEQ PORT_ID
------------------------------ ------------------------------ ------------------------------ ------------------------------ ---------- ------------------------------
69 9/30/2016 abc [email protected] 1 1901
69 9/30/2016 abc [email protected] 2 1902
69 9/30/2016 abc [email protected] 3 1903
對於單節點它工作,但對於多個序列它是拋出錯誤。當我使用路徑爲c_port_id varchar2(4000)PATH'請求/ Port_id_list/Port_id /文本()'給我錯誤預計單身序列有多個序列。 – yatinbc
等幾分鐘我通過XMLSequence運算符給你例子 – hinotf