Я запускаю приведенный ниже sql для анализа XML, но он возвращает мне только родительские узлы, только если существуют дочерние узлы.
select
nvxml.catalogs,nvlvl.levels L1,nvlvl.L1_CAT_ID,lvl2.l2 , lvl2.L2_CAT_ID
--, nvlvl.L1_CAT_ID ,lvl2.L2, lvl2.l2_cat_id
from
XMLTABLE('//category' PASSING XMLTYPE.CREATEXML (
'<categories>
<category name="Business Services">
<L1 name="Mail, Messenger and Delivery" categoryID="BSSRVMMDSV" />
<L1 name="Office Supplies" categoryID="BSSRVOFFSP" />
<L1 name="Translation & Interpretation" categoryID="BSSRVLNGSP" />
</category>
<category name="Telecommunications">
<L1 name="Mobile and Service Plans" categoryID="TLCOMHHWDB">
<L2 name="Mobile - Upgrade" categoryID="WHHDDBBDU" />
<L2 name="New Mobile and Plans" categoryID="PDAS_TMBB8820OWHHDDNBBDP" />
<L2 name="Mobile - Repair" categoryID="WHHDDBBDR" />
<L2 name="Mobile Access to Notes" categoryID="WHHDDBBNACC" />
<L2 name="Mobile Plan - Change" categoryID="WHHDDBBPC" />
<L2 name="Mobile Service - Cancel" categoryID="WHHDDBBSC" />
</L1>
</category>
</categories>'
)
COLUMNS catalogs VARCHAR2(300) PATH '@name' ,
levels XMLTYPE PATH '//L1' ,
levels2 XMLTYPE PATH '//L1//L2') nvxml ,
XMLTABLE('//L1' passing nvxml.levels
columns
-- levels2 XMLTYPE PATH '//L2' ,
levels varchar2(300) PATH '@name',
L1_CAT_ID VARCHAR2(300) PATH '@categoryID' ) nvlvl ,
XMLTABLE ('//L2' passing nvxml.levels2
columns
L2 varchar2(300) PATH '@name',
L2_CAT_ID VARCHAR2(300) PATH '@categoryID') lvl2
что я должен сделать, чтобы получить значения L1, у которых нет дочернего L2?