OracleテーブルからPL / SQLでXMLドキュメントを生成する
質問
OracleのいくつかのテーブルからPL / SQLでXMLドキュメントを生成する必要があります。私はこれを一度もやったことがなく、それをする主な方法がいくつかあるようだと気づきました:
- xmldom API
- xml関数(xmlelement、xmlagg、xmlrootなど)
- dbms_xmlgen関数
単一のドキュメントを生成するために参照される65のテーブルがあり、xsdに対して出力を検証する必要があります。ドキュメントは(オンデマンドではなく)バッチで生成されます-それが違いを生むかどうかはわかりません。 Oracle 10gを使用しています。
最初はxmldomパッケージの方が柔軟性に優れていたため、使用することに傾いていましたが、良い例やドキュメントを見つけるのに苦労していますが、xml関数はよりよく文書化されており、一般的に人気があります。これには理由がありますか?
このタイプのタスクに一般的に推奨されるアプローチは何ですか?
解決
私の経験では、DBMS_XMLGENはデータからXMLへの迅速でダーティな変換に適していますが、SQLを文字列として渡す必要があるため、これまであまり好きではありませんでした。さらに、要素名とROWSET / ROW構造の制御は厳しく制限されています。
XML関数は非常に便利であり、比較的単純な構造を扱う場合、私のお気に入りです。たとえば、複数のXMLAggレベルに到達すると、すぐに混乱して混乱することになります。
XMLDOMは、特に構造がより複雑であるか、反復ロジックが関係している場合に、XMLを生成する最も柔軟な方法です。ここでの主な欠点は、本質的にJava DOMのラッパーであり、ほとんどのメソッドがDOMNode入力を受け入れますが、PL / SQLは多態性を直接サポートしないため、DOMElementとDOMNodeの間の明示的なキャストが多くなり、一般に、オーバーロードされたプロシージャの独自のパッケージを作成して、これらすべてをカプセル化し、作業の負担を少し軽減します。
他のヒント
さて、非常に複雑なXMLドキュメントの生成にOracleを使用したことはありませんが、DBMS_XMLDOCの使用は非常に簡単です。
こちら(およびこちら、pl / sqlコードのみ)。また、Google Code Searchを使用してください。きっともっと見つけられることがあります。
次に、 DBMS_XMLDOMリファレンスがあります。ドキュメントがかなり乾燥していても。
これら2つの投稿も必ずお読みください:
http://www.liberidu.com/blog/?p=365 < br>
http://www.liberidu.com/blog/?p=369
別の方法として、Javaストアドプロシージャを使用してXMLを生成することもできます。
XSDを制御できるため、通常はxml関数( XMLElement
、 XMLForest
など)を使用します。 XSDをドキュメントの構造に一般的に一致させるので、物事はうまく一致します。
使用しようとしているスキーマが非常に複雑またはファンキーの場合、 DBMS_XMLGEN
または DOM
メソッドを検討する必要があります。
利用可能ないくつかのオプションの良い議論があります:
http:// asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:4980337843276
「Sean Dillon」を検索する場合もAskTomでは、Oracle内でXMLを使用してさまざまな問題と解決策を詳しく説明した記事の優れたコレクションを入手できます。