Sql 如何去除不需要的空XML标记?
在下面的SQL XML中,如果所有这些字段都为空,我不想显示Sql 如何去除不需要的空XML标记?,sql,xml,oracle,Sql,Xml,Oracle,在下面的SQL XML中,如果所有这些字段都为空,我不想显示recordingInfo标记: cc.source_album_title cc.product_album_promo_title cc.label cc.catalogue_no cc.isrc 这是我当前的查询: SELECT XMLAGG(XMLElement("Cue" -- start level 5 tag for cue
recordingInfo
标记:
cc.source_album_title
cc.product_album_promo_title
cc.label
cc.catalogue_no
cc.isrc
这是我当前的查询:
SELECT XMLAGG(XMLElement("Cue" -- start level 5 tag for cue
,XMLFOREST( rownum as "cueId"
,cc.dn_ccst_status as "cueStatusType"
,decode(cc.dn_ccst_status,'5',cc.cup_code,NULL) as "cueCupType" )
,XMLElement("musicWork" -- start level 6 tag for music title
,XMLFOREST(cc.title as "musicTitle")
,XMLElement("recordingInfo" -- start level 7 tag for music title
,XMLFOREST( cc.source_album_title as "albumTitle"
,cc.product_album_promo_title as "promoTitle"
,cc.label as "label"
,cc.catalogue_no as "catalogNumber"
,cc.isrc as "isrc")
)
) -- end level 6 tag for music title
) -- end level 5 tag cue
)
FROM creation_components cc
WHERE cc.prod_cre_surr_id = 22736214
如果上面列出的列全部为空,则生成带有空recordingInfo
标记的XML:
<Cue>
<cueId>1</cueId>
<cueStatusType>5</cueStatusType>
<cueCupType>W</cueCupType>
<musicWork>
<musicTitle>CLARE@RADIOWORKS.CO.UK</musicTitle>
<recordingInfo></recordingInfo>
</musicWork>
</Cue>
1.
5.
W
CLARE@RADIOWORKS.CO.UK
如果其中没有生成其他元素,如何停止包含空的
recordingInfo
标记的操作?您可以使用嵌套的XMLForest(…作为“recordingInfo”)
调用,而不是XMLElement(“recordingInfo”)
:
使用虚拟数据来匹配示例输出,并使用XMLSerialise
包装来美化输出:
WITH creation_components (prod_cre_surr_id, dn_ccst_status, cup_code, title,
source_album_title, product_album_promo_title, label, catalogue_no, isrc) as
(
SELECT 22736214, 5, 'W', 'CLARE@RADIOWORKS.CO.UK',
null, null, null, null, null from dual
)
SELECT XMLSERIALIZE(Document
XMLAGG(XMLElement("Cue" -- start level 5 tag for cue
,XMLFOREST( rownum as "cueId"
,cc.dn_ccst_status as "cueStatusType"
,decode(cc.dn_ccst_status,'5',cc.cup_code,NULL) as "cueCupType" )
,XMLElement("musicWork" -- start level 6 tag for music title
,XMLFOREST(cc.title as "musicTitle")
,XMLFOREST(
XMLFOREST(cc.source_album_title as "albumTitle"
,cc.product_album_promo_title as "promoTitle"
,cc.label as "label"
,cc.catalogue_no as "catalogNumber"
,cc.isrc as "isrc") as "recordingInfo" -- start level 7 tag for music title
)
) -- end level 6 tag for music title
) -- end level 5 tag cue
)
as CLOB INDENT SIZE = 2
)
FROM creation_components cc
WHERE cc.prod_cre_surr_id = 22736214;
得到
额外的标记仍会出现:
XMLSERIALIZE(DOCUMENTXMLAGG(XMLELEMENT("CUE"--STARTLEVEL5TAGFORCUE,XMLFOREST(ROW
--------------------------------------------------------------------------------
<Cue>
<cueId>1</cueId>
<cueStatusType>5</cueStatusType>
<cueCupType>W</cueCupType>
<musicWork>
<musicTitle>CLARE@RADIOWORKS.CO.UK</musicTitle>
<recordingInfo>
<label>RadioWorks</label>
</recordingInfo>
</musicWork>
</Cue>
XMLSERIALIZE(DOCUMENTXMLAGG(xmlement)(“CUE”--startevel5tagforcue,XMLFOREST(行
--------------------------------------------------------------------------------
1.
5.
W
CLARE@RADIOWORKS.CO.UK
无线电工程
再次更正Alex Poole您是XML SQL方面的专家truley。非常感谢您的帮助,它第一次在一个额外的XMLFOREST中运行
XMLSERIALIZE(DOCUMENTXMLAGG(XMLELEMENT("CUE"--STARTLEVEL5TAGFORCUE,XMLFOREST(ROW
--------------------------------------------------------------------------------
<Cue>
<cueId>1</cueId>
<cueStatusType>5</cueStatusType>
<cueCupType>W</cueCupType>
<musicWork>
<musicTitle>CLARE@RADIOWORKS.CO.UK</musicTitle>
</musicWork>
</Cue>
WITH creation_components (prod_cre_surr_id, dn_ccst_status, cup_code, title,
source_album_title, product_album_promo_title, label, catalogue_no, isrc) as
(
SELECT 22736214, 5, 'W', 'CLARE@RADIOWORKS.CO.UK',
null, null, 'RadioWorks', null, null from dual
)
SELECT XMLSERIALIZE(Document
XMLAGG(XMLElement("Cue" -- start level 5 tag for cue
,XMLFOREST( rownum as "cueId"
,cc.dn_ccst_status as "cueStatusType"
,decode(cc.dn_ccst_status,'5',cc.cup_code,NULL) as "cueCupType" )
,XMLElement("musicWork" -- start level 6 tag for music title
,XMLFOREST(cc.title as "musicTitle")
,XMLFOREST(
XMLFOREST(cc.source_album_title as "albumTitle"
,cc.product_album_promo_title as "promoTitle"
,cc.label as "label"
,cc.catalogue_no as "catalogNumber"
,cc.isrc as "isrc") as "recordingInfo" -- start level 7 tag for music title
)
) -- end level 6 tag for music title
) -- end level 5 tag cue
)
as CLOB INDENT SIZE = 2
)
FROM creation_components cc
WHERE cc.prod_cre_surr_id = 22736214;
XMLSERIALIZE(DOCUMENTXMLAGG(XMLELEMENT("CUE"--STARTLEVEL5TAGFORCUE,XMLFOREST(ROW
--------------------------------------------------------------------------------
<Cue>
<cueId>1</cueId>
<cueStatusType>5</cueStatusType>
<cueCupType>W</cueCupType>
<musicWork>
<musicTitle>CLARE@RADIOWORKS.CO.UK</musicTitle>
<recordingInfo>
<label>RadioWorks</label>
</recordingInfo>
</musicWork>
</Cue>