1

Python と Oracle XML DB を試しています。Oracle 11g データベースに XMLType 列と ID 列を持つテーブルがあります。XML 列のストレージ モデルはオブジェクト リレーショナルです。XML ファイル全体を取得する必要がある場合があり、多くの場合、4000 文字を超えているため、次のクエリを使用して CLOB を取得します。

select t.representation.getclobval()
from myxmldocs t 
where id=:documentId

このクエリを実行すると、出力に余分な空白が含まれ、挿入した XML ドキュメントには絶対になかった XML 要素間の改行とタブが含まれます。効果はある種のフォーマットであるため、出力は次のようになります。

<A>\n
\t<B></B>\n
\t\t<C>Some text</C>\n
\t\t<C>Some more text</C>\n
\t<B></B>\n
...

等々。とてもきれいで読みやすいのですが、なぜ私はそれを手に入れているのですか? また、余分な空白でそのチョークを使用している他のライブラリを台無しにします。

getclobval() を削除すると、Python クライアントは CLOB ではなくオブジェクトを取得し、それをどう処理すればよいかわかりません。

これは一貫しているように見えます。この問題は、sqlplus コマンド ライン クライアントを使用して発生し、別の XML スキーマを使用して他のテーブルを作成し、クエリを実行します。以前のバージョンのプロトタイプでは、XMLType 列で CLOB 記憶域モデルを使用していましたが、この問題は発生しませんでした。

追加の書式設定なしで XML ファイルを使用して CLOB を取得するには、クエリをどのように書き直す必要がありますか?


更新:コメントで要求されているように、これはselect dump(t.representation) from myxmldocs t where id=:documentIdコマンドラインクライアントからクエリを実行して取得した出力です(もちろん:documentIdをデータベースからの実際の既存のIDに置き換えます):

DUMP(T.REPRESENTATION)
--------------------------------------------------------------------------------
Typ=58 Len=218: 32,156,148,1,0,0,0,0,80,193,223,20,0,0,0,0,216,15,47,21,0,0,0,0,
80,44,55,21,0,0,0,0,0,202,154,59,160,15,0,0,160,15,0,0,1,0,4,0,220,190,195,71,1,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,174,33,65,0,15,0,72,0,1,0,0,0,0,0,0,0,49,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0
4

2 に答える 2

6

11gで使用できますxmlserialize(実際にはgetclobvalもう使用しないでください。パフォーマンス上の理由からお勧めしません)

 SQL> select t.test.getclobval() from testxml t where id = 1;

T.TEST.GETCLOBVAL()
--------------------------------------------------------------------------------
<A>
  <B>
    <C>foo</C>
    <C>foo2</C>
  </B>
</A>


SQL> select xmlserialize(document t.test as clob no indent) from testxml t where id = 1;

XMLSERIALIZE(DOCUMENTT.TESTASCLOBNOINDENT)
--------------------------------------------------------------------------------
<A><B><C>foo</C><C>foo2</C></B></A>
于 2013-03-18T12:08:38.133 に答える