EAV スキーマに格納される階層を持つ XML 構造があり、parent_id 列を持つ階層を格納するテーブルの 1 つがあります。この例のように、レベルには複数の要素を含めることができます
このように並べるよりも、階層を処理するためのより良い方法はありますか? この場合、階層レベルの数に制限があると思いますが、これは正しくないようです。
with x as (select xmltype('
<data>
<row level="1a">
<row level="1a2a">
<row level="1a2a3a"/>
<row level="1a2a3b"/>
</row>
<row level="1a2b">
<row level="1a2b3a"/>
<row level="1a2b3b"/>
</row>
</row>
<row level="2a">
<row level="2a1a">
<row level="2a1a3a"/>
<row level="2a1a3b"/>
</row>
</row>
</data>') as xml from dual)
select t1.l1, t2.l2, t3.l3
from x
,xmltable('/data/row'
passing x.xml
columns l1 varchar(20) path './@level'
, l2x xmltype path './row'
) t1
,xmltable('./row'
passing t1.l2x
columns l2 varchar2(20) path './@level'
, l3x xmltype path './row'
) t2
,xmltable('./row'
passing t2.l3x
columns l3 varchar2(20) path './@level'
) t3