sql - 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 提取邮件
特别感谢
米歇尔
解决方案
避免使用 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
推荐阅读
- javascript - 如何在Javascript中放大和缩小div后保持滚动顶部相同的位置,角度10
- c# - Html Agility Pack 返回“请求中止:无法创建 SSL/TLS 安全通道”,但仅在此特定 url 上
- node.js - 如何使用MongoDB从任意两个时间点减去最新数据
- javascript - 反应表中的条件 disableSortBy
- python - 我如何检测一个字符在字符串中出现的连续次数,如果它达到某个值打印到命令
- batch-file - 我可以在文件中回显两个百分号吗?
- sql - 使用 Google BigQuery 拆分并创建数组
- reactjs - 如何按 type="number" 显示我的消息?
- ruby-on-rails - 使用 gem 在 ruby 项目上生成声纳报告
- firebase - Firestore 空查询返回不可为空的字段