大きなxmlの複数のレコードを持つxmltype列を含むテーブルを持つOracle xmldbがあります。各 xml のサイズは約 100MB で、xml の一部には繰り返し要素があります。繰り返し要素は、各 xml で数千になる場合があります。繰り返し要素のみを読み取る必要があります。要素コレクションのバッチで繰り返し要素を読み取る最善の方法は何ですか? バッチサイズが一度に 50 個の繰り返し要素になる可能性があると仮定します。XML をバッチで効率的に書き込むために DBMS_XMLGEN を使用してコードを記述しましたが、同様のバッチ読み取りを行う方法がわかりませんでした。効率的なアプローチを教えてください。
1 に答える
0
1 つの SQL クエリでこれを行う方法をいくつか考え出しました。
アプローチ 1:
SQL クエリでの使用: 1. xmltable
xml 要素を繰り返すための列を使用して を作成します。2.各繰り返し要素を持つ列を選択します
select elements.*
from
xmltable('//*/parent[@name="E1"].*' passing xml
columns
repeating_element xmltype path '/repeatingElement') elements;
アプローチ 2:
using table()
operator: クエリは次のようになります。
select elements.*
from
table(xmlsequence(extract(xml, '//*/parent[@name="E1"]/repeatingElement'))) elements;
上記のクエリのいずれかを使用して、この sql クエリの limit 句でカーソルを開き、バッチでレコードをクエリします。
于 2016-11-15T10:59:32.083 に答える