1

我试图通过互联网寻找解决方案。我看过的一些东西: 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 片段的 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;
4

1 回答 1

3

也许您可以使用INSERT-SELECTxmltable。
例如,您可以使用如下查询从 xml 中选择数据:

这是一个 sqlfiddle 演示

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
于 2013-08-22T21:20:59.083 回答