SQL 来自 XML 无序集合的 Oracle exctrac 值
SQL Oracle exctrac value from XML unordered Collection
我有一个 XML 的 clob,如下所示:
<Data>
<Email_List>
<Email>
<EmailPrimaryFlag>Y</EmailPrimaryFlag>
<EmailAddress>test@test.it</EmailAddress>
</Email>
<Email>
<EmailPrimaryFlag>N</EmailPrimaryFlag>
<EmailAddress>test2@test2.it</EmailAddress>
</Email>
<Email>
<EmailPrimaryFlag>N</EmailPrimaryFlag>
<EmailAddress>test3@test3.it</EmailAddress>
</Email>
</Email_List>
<User>Name_User</User>
<City>City_test</City>
</Data>
我只需要对 PrimaryFlag=Y 进行提取
通常我会这样做:
select
extract(xmltype(PAYLOAD),'//*:User/text()').getStringVal() as User,
extract(xmltype(PAYLOAD),'//*:City/text()').getStringVal() as City,
但我不知道如何提取带有 PrimaryFlag=Y 的邮件
特别感谢
米歇尔
避免使用 EXRACT(),因为它已被弃用。
with t (payload) as (
select to_clob('<Data>
<Email_List>
<Email>
<EmailPrimaryFlag>Y</EmailPrimaryFlag>
<EmailAddress>test@test.it</EmailAddress>
</Email>
<Email>
<EmailPrimaryFlag>N</EmailPrimaryFlag>
<EmailAddress>test2@test2.it</EmailAddress>
</Email>
<Email>
<EmailPrimaryFlag>N</EmailPrimaryFlag>
<EmailAddress>test3@test3.it</EmailAddress>
</Email>
</Email_List>
<User>Name_User</User>
<City>City_test</City>
</Data>') from dual)
select x.* from t, xmltable(
'/Data'
passing xmltype(payload)
columns
primary_email varchar2(60) path 'Email_List/Email/EmailAddress[../EmailPrimaryFlag = "Y"]',
username varchar2(60) path 'User',
city varchar2(60) path 'City'
)x;
PRIMARY_EMAIL USERNAME CITY
------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
test@test.it Name_User City_test
我有一个 XML 的 clob,如下所示:
<Data>
<Email_List>
<Email>
<EmailPrimaryFlag>Y</EmailPrimaryFlag>
<EmailAddress>test@test.it</EmailAddress>
</Email>
<Email>
<EmailPrimaryFlag>N</EmailPrimaryFlag>
<EmailAddress>test2@test2.it</EmailAddress>
</Email>
<Email>
<EmailPrimaryFlag>N</EmailPrimaryFlag>
<EmailAddress>test3@test3.it</EmailAddress>
</Email>
</Email_List>
<User>Name_User</User>
<City>City_test</City>
</Data>
我只需要对 PrimaryFlag=Y 进行提取
通常我会这样做:
select
extract(xmltype(PAYLOAD),'//*:User/text()').getStringVal() as User,
extract(xmltype(PAYLOAD),'//*:City/text()').getStringVal() as City,
但我不知道如何提取带有 PrimaryFlag=Y 的邮件
特别感谢
米歇尔
避免使用 EXRACT(),因为它已被弃用。
with t (payload) as (
select to_clob('<Data>
<Email_List>
<Email>
<EmailPrimaryFlag>Y</EmailPrimaryFlag>
<EmailAddress>test@test.it</EmailAddress>
</Email>
<Email>
<EmailPrimaryFlag>N</EmailPrimaryFlag>
<EmailAddress>test2@test2.it</EmailAddress>
</Email>
<Email>
<EmailPrimaryFlag>N</EmailPrimaryFlag>
<EmailAddress>test3@test3.it</EmailAddress>
</Email>
</Email_List>
<User>Name_User</User>
<City>City_test</City>
</Data>') from dual)
select x.* from t, xmltable(
'/Data'
passing xmltype(payload)
columns
primary_email varchar2(60) path 'Email_List/Email/EmailAddress[../EmailPrimaryFlag = "Y"]',
username varchar2(60) path 'User',
city varchar2(60) path 'City'
)x;
PRIMARY_EMAIL USERNAME CITY
------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
test@test.it Name_User City_test