暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle XML数据检索失败

ASKTOM 2020-08-29
308

问题描述


我不是xml专家,并尝试使用xmltable从xml中提取值,但我只得到部分数据。
我在哪里犯错误,你能指导我吗?
提前谢谢。



XML文件:

<?xml version = "1.0" encoding = "WINDOWS-1252"?>





A

2020年8月10日
2020年8月11日
5


2020年8月11日
2020年8月12日
5


2020年8月12日
2020年8月13日
5



B

2020年8月10日
2020年8月11日
5


2020年8月11日
2020年8月12日
5


2020年8月12日
2020年8月13日
5



C

2020年8月10日
2020年8月11日
5


2020年8月11日
2020年8月12日
5


2020年8月12日
2020年8月13日
5





Expected output:

从到数量的猫
-------- ----- -------- --------
A 10-8月-2020 11-8月-2020 5
B 11-8月-2020 12-8月-2020 5
C 12-8月-2020 13-8月-2020 5


Query:

选择xt。*

从测试x,
XMLTABLE(XMLNAMESPACES('urn:xxxu:xxxx: 数据: 通知: 1: 标准 '作为
“ns0”),
'/ns0: 通知信封/ns0: 内容/ns0:NP'
传递x.用户数据

用户类别VARCHAR2(50) 路径 “ns0: 猫”,
从VARCHAR2(20) 路径 '/ns0: 分配/ns0:from',
到VARCHAR2(20) 路径 '/ns0: 分配/ns0: 到',
数量数量路径 '/ns0: 分配/ns0: 数量',
) xt


query output:

从到数量的猫
-------- ----- -------- --------
NULL NULL Null
B NULL NULL Null NULL
C NULL NULL Null NULL



专家解答

您的XML不支持您想要的结果,因为每个类别都有嵌套的从/到对。

也许像这样的东西


SQL> with test as
  2  ( select xmltype(
  3  '
  4  
  5  
  6  
  7  
  8  
  9  A
 10  
 11  10-AUG-2020
 12  11-aug-2020
 13  5
 14  
 15  
 16  11-AUG-2020
 17  12-aug-2020
 18  5
 19  
 20  
 21  12-AUG-2020
 22  13-aug-2020
 23  5
 24  
 25  
 26  
 27  B
 28  
 29  10-AUG-2020
 30  11-aug-2020
 31  5
 32  
 33  
 34  11-AUG-2020
 35  12-aug-2020
 36  5
 37  
 38  
 39  12-AUG-2020
 40  13-aug-2020
 41  5
 42  
 43  
 44  
 45  C
 46  
 47  10-AUG-2020
 48  11-aug-2020
 49  5
 50  
 51  
 52  11-AUG-2020
 53  12-aug-2020
 54  5
 55  
 56  
 57  12-AUG-2020
 58  13-aug-2020
 59  5
 60  
 61  
 62  
 63  ') user_data from dual
 64  )
 65  SELECT xt.UserCategory, xt2.xfrom, xt2.xto, xt2.xQUANTITY
 66  FROM test x,
 67    XMLTABLE(XMLNAMESPACES('urn:xxxu:xxxx:data:notification:1:standard' as "ns0"),
 68      '/ns0:NotificationEnvelope/ns0:Content/ns0:Np'
 69      PASSING x.user_data
 70    COLUMNS
 71      UserCategory VARCHAR2(10) PATH '/ns0:Np/ns0:cat',
 72      alloc xmltype PATH '/ns0:Np/ns0:allocation'
 73    ) xt,
 74    xmltable(
 75      XMLNAMESPACES('urn:xxxu:xxxx:data:notification:1:standard' as "ns0"),
 76      '/ns0:allocation'
 77      passing xt.alloc
 78      columns
 79          xFROM VARCHAR2(20) PATH '/ns0:allocation/ns0:from',
 80          xTO VARCHAR2(20) PATH '/ns0:allocation/ns0:to',
 81          xQUANTITY NUMBER PATH '/ns0:allocation/ns0:qty'
 82      ) xt2
 83    ;

USERCATEGO XFROM                XTO                   XQUANTITY
---------- -------------------- -------------------- ----------
A          10-AUG-2020          11-aug-2020                   5
A          11-AUG-2020          12-aug-2020                   5
A          12-AUG-2020          13-aug-2020                   5
B          10-AUG-2020          11-aug-2020                   5
B          11-AUG-2020          12-aug-2020                   5
B          12-AUG-2020          13-aug-2020                   5
C          10-AUG-2020          11-aug-2020                   5
C          11-AUG-2020          12-aug-2020                   5
C          12-AUG-2020          13-aug-2020                   5

9 rows selected.

SQL>
SQL>


文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论