请检查下面列出XML在PL/SQL的下方,输出应该是这样的:解析XML在PL/SQL查询属性
CITY_NAME POPULATION
MUMBAI 6780000
DELHI 5100000
HYDERABAD 2480000
CHENNAI 6100000
我使用下面的查询,但有没有更好的方式来处理,而不是加入rownum。我承认XML格式可以更好地处理XML属性。
WITH t as (select XMLTYPE('
<ROOT>
<CITY_INFO>
<CITY>
<CITY_NAME Value="MUMBAI"/>
<POPULATION Value="6780000" OldValue=""/>
</CITY>
<CITY>
<CITY_NAME Value="DELHI"/>
<POPULATION Value="5100000" OldValue=""/>
</CITY>
</CITY_INFO>
<CITY_INFO>
<CITY>
<CITY_NAME Value="HYDERABAD"/>
<POPULATION Value="2480000" OldValue=""/>
</CITY>
<CITY>
<CITY_NAME Value="CHENNAI"/>
<POPULATION Value="6100000" OldValue=""/>
</CITY>
</CITY_INFO>
</ROOT>
') as xml from dual)
select a.CITY_NAME, b.population from (select c.*, rownum as row_num
from t
,XMLTABLE('/ROOT/CITY_INFO/CITY/CITY_NAME'
PASSING t.xml
COLUMNS CITY_NAME VARCHAR2(100) PATH '/CITY_NAME/@Value'
) c) a,
(select pop.*, rownum as row_num
from t
,XMLTABLE('/ROOT/CITY_INFO/CITY/POPULATION'
PASSING t.xml
COLUMNS POPULATION NUMBER PATH '/POPULATION/@Value'
) pop) b where a.row_num = b.row_num
你是否得到任何错误,或者你的当前输出不是“应该”?将这些细节添加到您的问题。如果您的当前输出不同于添加当前输出。 – Ram 2015-02-11 15:03:27
查询的输出与预期相同,但rownum上的innerjoin看起来并不干净。下面发布的答案可以在不解析两次并加入的情况下实现输出。 – 2015-02-11 15:43:38