【发布时间】:2016-08-23 09:55:36
【问题描述】:
我在 CLOB 列中有下一条 xml 消息:
<Message type="Close Subscription" creationdatetime="15/01/2010 07:48" market="01" xmlns="http://test.org/">
<Customer userId="data" market="01">
<UserAccount>test@hotmail.com</UserAccount>
<ExpireDate>15/02/2016 07:48:11</ExpireDate>
<Member>
<MemberReferency number="000003" digit="85" market="01" name="John Rambo"/>
</Member>
<Email Id="700">
<Address>test@hotmail.com</Address>
<IsConfirmed>True</IsConfirmed>
<Privacies>
<Privacy type="C" value="I"/>
<Privacy type="M" value="I"/>
</Privacies>
</Email>
<Newsletter mailService="NL">
<language>N</language>
<frequency>0</frequency>
<promotion/>
<origin/>
</Newsletter>
</Customer>
</Message>
对于这个 xml 消息,我有两倍的 xml 标签 privacy
<Privacies>
<Privacy type="C" value="I"/>
<Privacy type="M" value="T"/>
</Privacies>
如何在不获取错误的情况下仅获取其中一个的隐私值?
我的意思是,获取 type='C' 的隐私。
现在我正在使用包含错误的下一个查询:
select Privacy
from (select *
from ta_gen.notification_log a,
XMLTable(XMLNAMESPACES('http://test.org/' AS "XML"),
'/XML:Message' passing xmltype(NTL_MSG) columns
Privacy VARCHAR2(1) path 'XML:Customer/XML:Email/XML:Privacies/XML:Privacy/@value') O
where a.ntl_type = 'Message')
注意:当 xml 标记 privacy 出现在 xml 消息中时,不会引发错误。
【问题讨论】:
-
如果隐私节点只有一个,但它的类型是M,你想看什么?换句话说,你是只想要那些有 C 的,还是你想优先考虑 C 而不是 M,但如果只有 M,你仍然显示 M?
标签: oracle11g oracle-sqldeveloper xml-namespaces xmltable