インターネットで解決策を見つけようとしました。私が見たもののいくつか: 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;