が誰かは、Oracle XMLType列からデータを取得で私を助けることができるRetreving XML要素
drop table xml_analysis;
create table xml_analysis(id number,soft_attributes XMLType);
create table xml_softattributes(id number,soft_attributes varchar2(200));
INSERT INTO xml_analysis VALUES
( 1, XMLType(
'<softattributes>
<attr1>ABC</attr1>
<attr2>XYZ</attr2>
<attr3>PQR</attr3>
</softattributes>
'));
insert into xml_softattributes values(1,'attr1');
insert into xml_softattributes values(1,'attr2');
insert into xml_softattributes values(1,'attr3');
- 表のxml_analysisは私が
- 表のxml_softattributesを知らないその属性はXMLType列を含み、 xml_analysisテーブルのXMLType列に存在するsoftattributes(ないのXPath)のリストを含む
- テーブルは、IDに基づいて接合され
今、私の問題は、テーブルxml_softattributesを使用してxml_analysisテーブルからデータを動的に取得することです。どうすればいいですか?
出力は私が動的な文字列を使用して実行されると考えることができ
Softattribute Value
=======================
attr1 ABC
attr2 XYZ
attr3 PQR
可能なソリューションを必要として、しかし、私は、ダイナミックな文字列クエリがデータを取得する必要はありません。
属性名が石で設定されていますか(attr1、attr2、および、attr2のみです) attr3'')、あるいはそれらを恣意的に許可する必要があり、 'xml_softattributes'の値に基づいて検索しますか?それが前者の場合は、静的コードで行うことができます。さもなければ動的コードが必要になるでしょうが(おそらく)、なぜあなたが '' attr1''と '' ABC''、 '' attr2''と '' attr2''というより一般的なXML構造を持たないのか、 XYZ 'などは、同じタイプのノードの「値」です。いずれにしても、これはEAVモデルのようなものです...最初に修正する必要がありますか? – mathguy
@mathguy:いいえ、属性名のパターンはありません。xml_softattributesテーブルの値に基づいて、何でも構いません。reqは、特定のCSVのソフトアトリビュートのセットです。テーブルに列を作成します。したがって、このxml_softattributesテーブルは、xml_analysisテーブルに動的に基づいてxmlを作成して作成します。その後、いくつかのレポートに対してこの属性を取得する必要があります。ただし、構造はattribute_nameとvalueになります。あなたは、XMLデータがそのように構成されている場合は、使用することができます:あなたのコメントでは非常に最後の文章は私が/示唆しています正確に何である - 我々はまた、「 ATTR1 ABC 」 –
@GauravSoniのようなXMLデータを格納することができます可能なすべての属性の名前を事前に知らなくてもXMLTYPEからXMLTYPEを抽出する 'XMLTABLE'関数、 UNPIVOTは必要ありませんが、データはすでに必要な列形式で抽出されています。 – mathguy