下面是一个示例表:
create table xmltemp (mydoc xmltype)下面是一个小的xml文档:
insert into xmltemp values (
xmltype
('<?xml version="1.0"?>
<countries>
<country>
<name>Canada</name>
</country>
<country>
<name>US</name>
<states>
<state>
<name>Washington</name>
<name>Oregon</name>
</state>
</states>
</country>
</countries>
')
) 请注意,加拿大没有'states‘元素,但美国有。我正在尝试获取这些查询结果(顺序和格式并不重要):
Canada,
US,Washington
US,Oregon当我执行此命令时,我在结果中同时看到加拿大和美国:
select
countryname
from xmltemp,
xmltable('/countries/country' passing mydoc
columns countryname varchar2(10) path 'name') 当我这样做的时候,我得到了两种状态:
select
statename
from xmltemp,
xmltable('/countries/country/states/state/name' passing mydoc
columns statename varchar2(20) path '.') c我尝试这样做是为了同时获取国家和州,但oracle似乎不喜欢'..‘语法:
select
statename
from xmltemp,
xmltable('/countries/country/states/state/name' passing mydoc
columns statename varchar2(20) path '.',
countryname varchar2(20) path '../../../name') c下面是错误:
ORA-19110: unsupported XQuery expression当我尝试这样做时,由于以下两种状态,我得到了'multi-item‘错误:
select
countryname,
statename
from xmltemp,
xmltable('/countries/country' passing mydoc
columns countryname varchar2(10) path 'name',
statename varchar2(20) path 'states/state/name') c下面是错误:
ORA-19279: XPTY0004 - XQuery dynamic type mismatch: expected singleton
sequence - got multi-item sequence什么查询将使我获得所需的输出:
Canada,
US,Washington
US,Oregon谢谢
发布于 2012-02-17 12:12:36
试试这个:
select X.COUNTRYNAME, Y.STATENAME
from XMLTEMP
,xmltable('/countries/country'
passing MYDOC
columns COUNTRYNAME varchar2(20) path './name',
STATES xmltype path './states') X,
xmltable('/states/state/name' passing X.STATES
columns STATENAME varchar2(20) path '.') (+) Y因为您有多个状态,所以应该连接到另一个xml表。由于一些国家没有状态,因此它需要是一个左外部联接。我在10g上尝试使用(+)的旧方法,在10g中使用left outer join似乎有问题,但显然在11g中应该没问题。
https://stackoverflow.com/questions/9321391
复制相似问题