我需要在Oracle中解析具有多个子元素的XML,但我一直得到多项序列错误。我看到之前讨论过这个问题,我尝试了交叉连接两个XMLTABLE的方法,但它仍然不起作用,我想我被卡住了。你能提出一个解决方案吗?
这就是XML:
<dataView>
<categoryId>22</categoryId>
<tableReferenceId>2533050</tableReferenceId>
<noOfColumnsToFixHorizontally>0</noOfColumnsToFixHorizontally>
<fieldOptions>
<id>2533805</id>
<fieldId>2446226</fieldId>
<entityId>2446223</entityId>
<fieldHeaderLabel>Product ID</fieldHeaderLabel>
<displayedByDefault>true</displayedByDefault>
<filterableAndSortable>true</filterableAndSortable>
<quickFilterValues>Laptops</quickFilterValues>
<quickFilterValues>Monitors</quickFilterValues>
<quickFilterValues>PCs</quickFilterValues>
<columnWidth>MEDIUM_SMALL</columnWidth>
<fieldType>DVFO_DATA</fieldType>
</fieldOptions>
<fieldOptions>
<id>2533806</id>
<fieldId>563</fieldId>
<fieldHeaderLabel>Quarter</fieldHeaderLabel>
<displayedByDefault>true</displayedByDefault>
<filterableAndSortable>true</filterableAndSortable>
<quickFilterValues>Quarter 3 2016</quickFilterValues>
<quickFilterValues>Quarter 4 2016</quickFilterValues>
<quickFilterValues>Quarter 1 2017</quickFilterValues>
<quickFilterValues>Quarter 2 2017</quickFilterValues>
<columnWidth>MEDIUM_SMALL</columnWidth>
<fieldType>DVFO_DATA</fieldType>
</fieldOptions>
</dataView>
预期结果将是quickFilterValues节点中的非重复值:
| |
| - -----|
| 笔记本电脑|
| 显示器|
| 个人电脑|
| 2016年第三季度|
| 2016年第四季度|
| 2017年第一季度|
| 2017年第二季度|
这是我尝试使用的一个查询:
with plm as (select '<?xml version="1.0" encoding="UTF-8" standalone="yes"?><dataView><categoryId>22</categoryId><tableReferenceId>2533050</tableReferenceId><noOfColumnsToFixHorizontally>0</noOfColumnsToFixHorizontally><fieldOptions><id>2533805</id><fieldId>2446226</fieldId><entityId>2446223</entityId><fieldHeaderLabel>Product ID</fieldHeaderLabel><displayedByDefault>true</displayedByDefault><filterableAndSortable>true</filterableAndSortable><quickFilterValues>Laptops</quickFilterValues><quickFilterValues>Monitors</quickFilterValues><quickFilterValues>PCs</quickFilterValues><columnWidth>MEDIUM_SMALL</columnWidth><fieldType>DVFO_DATA</fieldType></fieldOptions><fieldOptions><id>2533806</id><fieldId>563</fieldId><fieldHeaderLabel>Quarter</fieldHeaderLabel><displayedByDefault>true</displayedByDefault><filterableAndSortable>true</filterableAndSortable><quickFilterValues>Quarter 3 2016</quickFilterValues><quickFilterValues>Quarter 4 2016</quickFilterValues><quickFilterValues>Quarter 1 2017</quickFilterValues><quickFilterValues>Quarter 2 2017</quickFilterValues><columnWidth>MEDIUM_SMALL</columnWidth><fieldType>DVFO_DATA</fieldType></fieldOptions></dataView>
' x from dual)
SELECT *
FROM plm,
XMLTable('/dataView/fieldOptions'
PASSING xmltype(x)
COLUMNS
fo VARCHAR2(250) PATH 'quickFilterValues'
)
但我得到了错误:
ORA-19279:XPTY 0004- XQuery动态类型不匹配:期望的单例序列-得到多项序列19279。00000 -“XPTY 0004- XQuery动态类型不匹配:预期的单例序列-得到多项序列”* 原因:传入的XQuery序列有多个项。* 操作:更正XQuery表达式以返回单个项序列。
1条答案
按热度按时间6jjcrrmo1#
您可以用途:
其中,对于样本数据:
输出:
| FO|
| - -----|
| 笔记本电脑|
| 显示器|
| 个人电脑|
| 2016年第三季度|
| 2016年第四季度|
| 2017年第一季度|
| 2017年第二季度|
fiddle