如何将 XML 属性作为列写入 Oracle 中的表?
Posted
技术标签:
【中文标题】如何将 XML 属性作为列写入 Oracle 中的表?【英文标题】:How to write XML attributes as columns to a table in Oracle? 【发布时间】:2013-08-22 18:55:40 【问题描述】:我试图通过互联网寻找解决方案。我看过的一些东西: https://forums.oracle.com/thread/2182669 http://www.club-oracle.com/forums/how-to-insert-data-from-xml-to-table-t2845/
在所有这些情况下,该解决方案都考虑了只有节点和子节点但没有属性的 XML 结构。事实上,其中一种解决方案建议将 XML 转换为只有节点没有属性的规范形式。
这是我正在使用的 xml 结构示例:
示例 XML
<rep type="P" title="P List">
<as>
<a id="3" />
<a id="4" />
</as>
</rep>
我正在使用 oracle 客户端 11.2 和 SQL 开发人员
我的问题是:如何在节点旁边将 XML 数据写入具有属性也作为列值的表中?
以下内容适用于我的临时表,最终我会将其规范化为多个表..
-- Temp table
CREATE TABLE TEMP_Temp1
(rtype varchar(10),
title varchar(200),
aid varchar(10),
description varchar(100),
flag varchar(50),
po char(1));
x是上面xml sn-p的varchar变量。
INSERT INTO TEMP_Temp1
SELECT *
FROM xmltable( '/rep' passing xmltype (x) columns rtype VARCHAR(10) path '@type' , title VARCHAR(200) path '@title') AS xmlr ,
xmltable( '/rep/a' passing xmltype (x) columns aid VARCHAR(10) path '@id' , description VARCHAR(100) path '@description' , flag VARCHAR(50) path '@flag' , po CHAR(1) path '@po') AS xmla ;
END;
【问题讨论】:
你能用需要插入 XML 的表的描述来更新你的问题吗? -- 临时表 CREATE TABLE TEMP_Temp1 (rtype varchar(10), title varchar(200),aid varchar(10), description varchar(100), flag varchar(50), po char(1 )); 发现这个有用.. ***.com/questions/2203825/… 【参考方案1】:也许您可以将INSERT-SELECT
与 xmltable 一起使用。
例如,您可以使用如下查询从 xml 中选择数据:
Here is a sqlfiddle demo
select X.*
from xmltable(
'for $i in //rep/as/a return <row>
$i/../../@type
$i/../../@title
$i/@id</row>' passing xmltype('<rep type="P" title="P List">
<as>
<a id="3" />
<a id="4" />
</as>
</rep>')
columns
type varchar2(1) path '@type',
title varchar2(10) path '@title',
id number path '@id'
) X
【讨论】:
以上是关于如何将 XML 属性作为列写入 Oracle 中的表?的主要内容,如果未能解决你的问题,请参考以下文章