来自多个元素的Oracle SQL extractvalue
我花了几天时刻探求以下题目的简朴办理方案,我必要一些辅佐.我有一个带有两列的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构建了后续毗连. 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) (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |