首页 > 解决方案 > XML无序集合中的SQL Oracle exctrac值

问题描述

我有一个这样的 XML 文件:

<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 提取邮件

特别感谢

米歇尔

标签: sqloracleplsqlextract

解决方案


避免使用 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                                                      

推荐阅读