Oracle Textを使用すると、XMLデータを含む列にCONTEXT索引を作成できます。列型はXMLTypeですが、XMLデータの正しい索引プリファレンスを使用する場合は、サポートされている任意の型にできます。
Text-on-XMLメソッドでは、標準のCONTAINS問合せを使用して、構造化制約を追加し、検索の範囲を特定のセクション、フィールド、タグまたは属性に制限します。つまり、テキスト演算子内に、WITHIN、HASPATH、INPATHなどの構造を指定することになります。
たとえば、CONTEXT索引を設定し、XMLドキュメントを使用してセクションを作成します。購買依頼を定義する次のXMLドキュメントを考えてみます。
<?xml version="1.0"?>
<PURCHASEORDER pono="1">
<PNAME>Po_1</PNAME>
<CUSTNAME>John</CUSTNAME>
<SHIPADDR>
<STREET>1033 Main Street</STREET>
<CITY>Sunnyvalue</CITY>
<STATE>CA</STATE>
</SHIPADDR>
<ITEMS>
<ITEM>
<ITEM_NAME> Dell Computer </ITEM_NAME>
<DESC> Pentium 2.0 Ghz 500MB RAM </DESC>
</ITEM>
<ITEM>
<ITEM_NAME> Norelco R100 </ITEM_NAME>
<DESC>Electric Razor </DESC>
</ITEM>
</ITEMS>
</PURCHASEORDER>
品目の説明セクション内にPentiumを含むすべての購買依頼を問い合せるには、WITHIN演算子を使用します。
SELECT id from po_tab where CONTAINS( doc, 'Pentium WITHIN desc') > 0;
INPATH演算子を使用して、XPATH式でより複雑な基準を指定します。
SELECT id from po_tab where CONTAINS(doc, 'Pentium INPATH (/purchaseOrder/items/item/desc') > 0;