如果您真的下载了 XML 版本而不是 JSON 版本,您可以形成如下基本查询:
select /*+ cursor_sharing_exact */ id, classname, name, value
from (select rownum id, classname, field_list
from myxml mx cross join
xmltable('/list/resources/resource'
passing xmltype(mx.mydoc)
columns classname varchar2(100) path '@classname',
field_list xmltype path 'field'
)
)
cross join xmltable('/field'
passing field_list
columns
name varchar2(200) path '@name',
value varchar2(200) path '.'
)
这会给你这样的输出:
SQL> select /*+ cursor_sharing_exact */ id, classname, name, value
2 from (select rownum id, classname, field_list
3 from myxml mx cross join
4 xmltable('/list/resources/resource'
5 passing xmltype(mx.mydoc)
6 columns classname varchar2(100) path '@classname',
7 field_list xmltype path 'field'
8 )
9 )
10 cross join xmltable('/field'
11 passing field_list
12 columns
13 name varchar2(200) path '@name',
14 value varchar2(200) path '.'
15 )
16 /
ID CLASSNAME NAME VALUE
---------- -------------------- -------------------- --------------------
1 Quote change 0.099976
1 Quote chg_percent 0.009367
1 Quote name USD/KRW
1 Quote price 1067.400024
1 Quote symbol KRW=X
1 Quote ts 1359020860
1 Quote type currency
1 Quote volume 0
你当然可以 PIVOT 那个。
with data as (select /*+ cursor_sharing_exact */ id, classname, name, value
from (select rownum id, classname, field_list
from myxml mx cross join
xmltable('/list/resources/resource'
passing xmltype(mx.mydoc)
columns classname varchar2(100) path '@classname',
field_list xmltype path 'field'
)
)
cross join xmltable('/field'
passing field_list
columns
name varchar2(200) path '@name',
value varchar2(200) path '.'
) ) select id, classname,
max(case when name = 'change' then value end) change,
max(case when name = 'chg_percent' then value end) chg_percent,
max(case when name = 'name' then value end) name,
max(case when name = 'price' then value end) price,
max(case when name = 'symbol' then value end) symbol,
max(case when name = 'ts' then value end) ts,
max(case when name = 'type' then value end) type,
max(case when name = 'volume' then value end) volume
from data
group by id, classname
order by id
一个样本(缩短的数据):http://sqlfiddle.com/#!4/7b53c/1