2016-09-19 13 views
0

Oracle xmltable関数を使用して、表のxmltype列からデータを取得する必要があります。 XMLデータにはデフォルトの名前空間が含まれています。だから私はこのコードを使用しています:今xmltable Oracle関数を複数のデフォルト名前空間で使用する

xmltable(xmlnamespaces(default 'myDefaultNamespace'),... 

を私が直面しています問題は、一部の文書は、(彼らはまったく同じフォーマットされている場合でも)同じデフォルトの名前空間を持っていないということです。その結果、1つのクエリですべてのデータを取得することができなくなり、もう1つの名前空間をデフォルトパラメータとして実行する必要があります。

複数のデフォルト名前空間を渡すことでテーブルの2倍のクエリを避ける方法はありますか?

おかげで、

答えて

0

あなたは複数の名前空間の文字列を指定することができますが、唯一のデフォルトの文字列:

https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions228.htm

XMLTable function definition

XML_namespaces_clause

は通常1で複数の文字列を使用してみてくださいデフォルトとして指定されていれば、動作するはずです。

+0

コード例を追加できますか? 2番目の名前空間文字列を追加すると、AS識別子構造体を使用する必要があります。これは、XML文書の名前空間の接頭辞が要素にないため機能しません。 – DoubleT28

+1

名前空間が文書内に存在しない場合、それは1つのクエリでは動作しません。デフォルトは1つだけです。 –

0

私は最終的に問題の回避策を見つけました。xmltable関数のpassing節のreplace関数を使用して、名前空間の1つを置き換えます。

passing xmltype(replace(t.xml.getClobValue(),'SecondNamespace','MyDefaultNamespace')) 
関連する問題