Oracle XMLtable 提供交叉连接的数据



我写了一个Oracle XML sql,它给出了如下输出。我已经给出了下面的整个代码,从创建表到下面的sql,以为您提供快速帮助。 输出:(错误(

ID, NAME 
1   name1
1   name2
2   name1
2   name2 

想要像下面这样输出(必需输出(:

ID, NAME
1   name1
2   name2

法典:

CREATE TABLE XML_TBL
(    "INSTANCE_DETAIL_XML" "SYS"."XMLTYPE" 
);
SET DEFINE OFF;
Insert into XML_TBL (INSTANCE_DETAIL_XML) values ('<?xml version="1.0" encoding="UTF-8" standalone=''yes''?>
<driXML>
<sDet>
<cols>
<col>
<id>1</id>
<name>name1</name>
</col>
<col>
<id>2</id>
<name>name2</name>
</col>
</cols>
</sDet>
</driXML>
');

我尝试了下面的sql,您可以对其进行修改或使用它创建一个新sql:

Select XT_ID.id
, XT_NAME.name
FROM xml_tbl XT
join XMLTABLE
('/driXML' PASSING XT.INSTANCE_DETAIL_XML COLUMNS
id_XML XMLType    PATH 'sDet/cols/col/id'
, name_XML XMLType  PATH 'sDet/cols/col/name'
) RI_XML on 1=1
join XMLTABLE('/id'   PASSING RI_XML.id_XML   COLUMNS ID   number        PATH '.') XT_ID on 1=1
join XMLTABLE('/name' PASSING RI_XML.name_XML COLUMNS NAME varchar2(50)  PATH '.') XT_NAME on 1=1
;             

您可以直接提取第一XMLTABLE中的idname,如果您通过层次结构下降以便路径'/driXML/sDet/cols/col'那么XMLTYPE的每一行将是一个col元素,idname将与此相关。

甲骨文设置

CREATE TABLE XML_TBL( INSTANCE_DETAIL_XML ) AS
SELECT XMLTYPE( '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<driXML>
<sDet>
<cols>
<col>
<id>1</id>
<name>name1</name>
</col>
<col>
<id>2</id>
<name>name2</name>
</col>
</cols>
</sDet>
</driXML>' ) FROM DUAL;

查询

SELECT id,
name
FROM   xml_tbl XT
CROSS JOIN XMLTABLE(
'/driXML/sDet/cols/col'
PASSING XT.INSTANCE_DETAIL_XML
COLUMNS
id   NUMBER       PATH 'id',
name VARCHAR2(50) PATH 'name'
);

输出

身份证 |名字 -: |:----  1 |名称1  2 |name2

db<>fiddle here

相关内容

  • 没有找到相关文章

最新更新