解析PL/SQL查询中的XML属性
请在下面的PL/SQL中检查下面的XML,输出应如下所示:解析PL/SQL查询中的XML属性,xml,oracle,Xml,Oracle,请在下面的PL/SQL中检查下面的XML,输出应如下所示: CITY_NAME POPULATION MUMBAI 6780000 DELHI 5100000 HYDERABAD 2480000 CHENNAI 6100000 我正在使用下面的查询,但是有没有更好的方法来处理而不是加入rownum。我承认XML格式可以更好地处理XML属性 WITH t as (select XMLTYPE(' <ROOT> <CITY_INFO>
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
通过将xmltable中的根路径更改为CITY_NAME和POPULATION节点之前的级别,并通过//引用CITY_NAME和POPULATION节点,以下操作对我有效:
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, a.population
from t,
XMLTABLE('/ROOT/CITY_INFO/CITY'
PASSING t.xml
COLUMNS CITY_NAME VARCHAR2(100) PATH '//CITY_NAME/@Value',
POPULATION NUMBER PATH '//POPULATION/@Value'
) a;
CITY_NAME POPULATION
-------------------- ----------
MUMBAI 6780000
DELHI 5100000
HYDERABAD 2480000
CHENNAI 6100000
您是否有任何错误,或者您当前的输出是否不符合要求?将这些细节添加到您的问题中。如果当前输出与添加当前输出不同。查询的输出与预期的相同,但rownum上的innerjoin看起来不干净。下面的答案实现了输出,无需两次解析和加入。谢谢你的工作。对不起,我不能投赞成票,因为我是newb@KrishY-尽管如此,您仍然可以接受此答案。