1

インターネットで解決策を見つけようとしました。私が見たもののいくつか: https://forums.oracle.com/thread/2182669 http://www.club-oracle.com/forums/how-to-insert-data-from-xml-to-table -t2845/

これらのすべてのケースで、ソリューションはノードと子ノードのみを持ち、属性を持たない XML 構造を考慮します。実際、解決策の 1 つは、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 に答える