Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Làm cách nào để loại bỏ các thẻ XML trống không mong muốn?

Bạn có thể sử dụng XMLForest(.. as "recordingInfo") gọi thay cho XMLElement("recordingInfo") :

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")
    ,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
)
FROM creation_components cc
WHERE cc.prod_cre_surr_id = 22736214;

Với dữ liệu giả để khớp với đầu ra mẫu của bạn và XMLSerialise trình bao bọc để kiểm tra đầu ra:

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', '[email protected]',
    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;

được

XMLSERIALIZE(DOCUMENTXMLAGG(XMLELEMENT("CUE"--STARTLEVEL5TAGFORCUE,XMLFOREST(ROW
--------------------------------------------------------------------------------
<Cue>
  <cueId>1</cueId>
  <cueStatusType>5</cueStatusType>
  <cueCupType>W</cueCupType>
  <musicWork>
    <musicTitle>[email protected]</musicTitle>
  </musicWork>
</Cue>

Với dữ liệu không rỗng trong các cột sau:

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', '[email protected]',
    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;

thẻ phụ vẫn xuất hiện:

XMLSERIALIZE(DOCUMENTXMLAGG(XMLELEMENT("CUE"--STARTLEVEL5TAGFORCUE,XMLFOREST(ROW
--------------------------------------------------------------------------------
<Cue>
  <cueId>1</cueId>
  <cueStatusType>5</cueStatusType>
  <cueCupType>W</cueCupType>
  <musicWork>
    <musicTitle>[email protected]</musicTitle>
    <recordingInfo>
      <label>RadioWorks</label>
    </recordingInfo>
  </musicWork>
</Cue>



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Xóa các số được tìm thấy trong cột chuỗi

  2. Cách định dạng ngày trong Oracle

  3. ORA-00907:thiếu dấu ngoặc đơn bên phải (Có Ví dụ)

  4. Chỉ mục thời gian không đổi cho cột chuỗi trên cơ sở dữ liệu Oracle

  5. Cài đặt gói RODBC / ROracle trên OS X Mavericks