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