获取具有 xml 结构的 Oracle CLOB 的 xml 属性对
Getting xml attribute pair of Oracle CLOB with xml structure
我有一个 xml 具有以下结构:
<xml>
<ele1>
<ele2>
<Attribute Key="x1" Value="V1" />
<Attribute Key="x2" Value="V2" />
<Attribute Key="x3" Value="V3" />
<Attribute Key="x4" Value="V4" />
<Attribute Key="x5" Value="V5" />
</ele2>
</ele1>
</xml>
对于每个 Key=x1 和 Key=x3,我想获取值。
目标 table/select 应该有以下列:
ele2 | x1 | x2
实际我有以下代码:
SELECT Description.*, Other.*
FROM (select XMLTYPE.createXML(XMLCODE) as XMLCODE from Table) myxml,
XMLTABLE('/ele1/ele2/Attribute[@Key="x1"]'
PASSING myxml.XMLCODE
COLUMNS
"Description" VARCHAR2(255) PATH '@Value'
) Description,
XMLTABLE('/ele1/ele2/Attribute[@Key="x2"]'
PASSING myxml.XMLCODE
COLUMNS
"Other" VARCHAR2(255) PATH '@Value'
) Other;
问题是 XMLTables 没有连接,我得到了一个笛卡尔积。有什么想法或有更简单的方法吗?
这里不需要多次 XMLTable 调用;您可以通过在 columns
子句中提供多列(复数 - 有点线索)来从同一个节点中提取多个值。
select x.*
from myTable t
cross join XMLTable('/xml/ele1/ele2'
passing xmltype(t.xmlcode)
columns description varchar2(255) path 'Attribute[@Key="x1"]/@Value',
other varchar2(255) path 'Attribute[@Key="x2"]/@Value'
) x;
两个属性值都来自同一个 ele2
节点。
我有一个 xml 具有以下结构:
<xml>
<ele1>
<ele2>
<Attribute Key="x1" Value="V1" />
<Attribute Key="x2" Value="V2" />
<Attribute Key="x3" Value="V3" />
<Attribute Key="x4" Value="V4" />
<Attribute Key="x5" Value="V5" />
</ele2>
</ele1>
</xml>
对于每个 Key=x1 和 Key=x3,我想获取值。
目标 table/select 应该有以下列: ele2 | x1 | x2
实际我有以下代码:
SELECT Description.*, Other.*
FROM (select XMLTYPE.createXML(XMLCODE) as XMLCODE from Table) myxml,
XMLTABLE('/ele1/ele2/Attribute[@Key="x1"]'
PASSING myxml.XMLCODE
COLUMNS
"Description" VARCHAR2(255) PATH '@Value'
) Description,
XMLTABLE('/ele1/ele2/Attribute[@Key="x2"]'
PASSING myxml.XMLCODE
COLUMNS
"Other" VARCHAR2(255) PATH '@Value'
) Other;
问题是 XMLTables 没有连接,我得到了一个笛卡尔积。有什么想法或有更简单的方法吗?
这里不需要多次 XMLTable 调用;您可以通过在 columns
子句中提供多列(复数 - 有点线索)来从同一个节点中提取多个值。
select x.*
from myTable t
cross join XMLTable('/xml/ele1/ele2'
passing xmltype(t.xmlcode)
columns description varchar2(255) path 'Attribute[@Key="x1"]/@Value',
other varchar2(255) path 'Attribute[@Key="x2"]/@Value'
) x;
两个属性值都来自同一个 ele2
节点。