如何将 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 中的表?的主要内容,如果未能解决你的问题,请参考以下文章

将字节数组写入oracle中的原始列

oracle 查询每天写入的数据

如何将数据作为列写入熊猫

如何将 oracle 中的 IDENTITY 列重置为新值

如何在解析之前检查 XML 中是不是存在属性和标签?

初识Oracle的XMLType