Oracle:具有多个与表同名的节点的 XML

问题描述 投票:0回答:1

我有一个 XML 文件存储在一个结构相当奇怪的表中:它可以不包含某个节点,可以包含它一次,也可以包含它多次。在下面的示例中,节点“quickFilterValues”处于所有 3 种情况。我想构建一个包含两列的报告:“fieldId”和“quickFilterValues”的计数。您能帮我解决 Oracle 中的 SQL 解决方案吗?

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><dataView><fieldOptions><fieldId>1</fieldId></fieldOptions><fieldOptions><fieldId>2</fieldId><quickFilterValues>100</quickFilterValues></fieldOptions><fieldOptions><fieldId>3</fieldId><quickFilterValues>10</quickFilterValues><quickFilterValues>20</quickFilterValues><quickFilterValues>30</quickFilterValues></fieldOptions></dataView>
字段ID
1 0
2 1
3 3

我尝试过使用

create table t(c clob);

insert into t values('<?xml version="1.0" encoding="UTF-8" standalone="yes"?><dataView><fieldOptions><fieldId>1</fieldId></fieldOptions><fieldOptions><fieldId>2</fieldId><quickFilterValues>100</quickFilterValues></fieldOptions><fieldOptions><fieldId>3</fieldId><quickFilterValues>10</quickFilterValues><quickFilterValues>20</quickFilterValues><quickFilterValues>30</quickFilterValues></fieldOptions></dataView>');

select *
from t
cross apply xmltable(
'/dataView/fieldOptions/quickFilterValues'
passing xmltype(t.c)
columns
fo  varchar2(250) path '.'
) x;

但这只能得到“quickFilterValues”的总数,我需要它按“fieldId”分组。

sql xml oracle
1个回答
1
投票

XPATH 表达式可以包含像 count() 这样的表达式:

xmltable(
    '/dataView/fieldOptions' passing d.xml
    columns
        fieldId path './fieldId/text()',
        nQuickFilterValues number path 'count(./quickFilterValues)'
        
) t
© www.soinside.com 2019 - 2024. All rights reserved.