加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

来自多个元素的Oracle SQL extractvalue

发布时间:2021-01-12 07:10:19 所属栏目:站长百科 来源:网络整理
导读:我花了几天时刻探求以下题目的简朴办理方案,我必要一些辅佐.我有一个带有两列的Oracle表,recid(帐号)作为主键,xmlrecord存储全部xml数据.我试图行使SQL查询为我们的应用措施导出具有多值项的值.解除数据破坏,假如存在c1 m =“1”,则总会有响应的c2 m =“1”

我花了几天时刻探求以下题目的简朴办理方案,我必要一些辅佐.我有一个带有两列的Oracle表,recid(帐号)作为主键,xmlrecord存储全部xml数据.我试图行使SQL查询为我们的应用措施导出具有多值项的值.解除数据破坏,假如存在c1 m =“1”,则总会有响应的c2 m =“1”和c3 m =“1”,依此类推.该表太大而无法多次触发它以提取每个项目,因此我必要在行的一次会见中将它们所有拉出xmlrecord.我已经实行了内部联接(1 = 1)和xmltables,但老是在返回的数据中行使NULLS或在新行上的每个新匹配.因为xml的布局,在这个实例中从顶层提取值对我不起浸染

我们的基表数据布局:

RECID             XMLRECORD
-----------------------------------
0000001           <row><c1>test</c1><c2>test2</c2>....</row>
0000002           <row><c1>test</c1><c2>test2</c2>....</row>

因为没有多个valuse字段,上述记录可以正常事变.我正在全力的处所是存储在XMLRecord中的数据如下所示:

<row>
  <c1>test1</c1>
  <c1 m=1>test1_2</c1>
  <c2>test2</c2>
  <c2 m=1>test2_2</c2>
  <c3>test3</c3>
  <c3 m=1>test3_2</c3>
</row>

我想要的输格外式如下:

RECID       Col1     Col2     Col3
-----------------------------------
0000003     test1    test2    test3
0000003     test1_2  test2_2  test3_2
0000004     test1    test2    test3
0000004     test1_2  test2_2  test3_2

办理要领

感谢你的意见,但我已经想法通过构建一个合用于此实例的毗连来得到我必要的办理方案.关于它的甜头是,无论供给商向我们投放几多记录,它城市起浸染.在某些环境下,“m”属性最多可达9或10.

我行使了凡是的内毗连(1 = 1)并基于动态ID构建了后续毗连.
第一行的ID_NUM的功效是“c”,下一行是“c2”,依此类推.

SELECT 
    t.recid,t2.VALUE1,t3.VALUE2,t4.VALUE3 
FROM t
INNER JOIN XMLTABLE('/row/c1'
    PASSING t.xmlrecord
    ID_NUM VARCHAR(4) path 'concat(substring(ancestor-or-self::*/name(.),1,1),@m)',VALUE1 VARCHAR(20) path '.') t2
ON (1=1)
INNER JOIN XMLTABLE('/row/c2'
    PASSING t.xmlrecord
    ID_NUM VARCHAR(4) path 'concat(substring(ancestor-or-self::*/name(.),VALUE2 VARCHAR(20) path '.') t3
ON (t2.ID_NUM=t3.ID_NUM)
INNER JOIN XMLTABLE('/row/c3'
    PASSING t.xmlrecord
    ID_NUM VARCHAR(4) path 'concat(substring(ancestor-or-self::*/name(.),VALUE3 VARCHAR(20) path '.') t4
ON (t2.ID_NUM=t4.ID_NUM)

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读