この節では、以下の目的で XML コレクションを検索する方法を解説します。
このタスクは実際には条件を使用した合成です。 以下の検索基準を使用して検索基準を指定できます。
たとえば、DAD ファイル order.dad を使用して XML コレクションの sales_ord を使用可能にしたものの、 Web から導出したデータを使用して価格をオーバーライドしたい場合、 以下のようにして <SQL_stmt> DAD 要素の値をオーバーライドすることができます。
EXEC SQL INCLUDE SQLCA; EXEC SQL BEGIN DECLARE SECTION; ... EXEC SQL END DECLARE SECTION; float price_value; /* create table */ EXEC SQL CREATE TABLE xml_order_tab (xmlorder XMLVarchar); /* initialize host variable and indicators */ strcpy(collection,"sales_ord"); strcpy(result_tab,"xml_order_tab"); overrideType = SQL_OVERRIDE; max_row = 20; num_row = 0; returnCode = 0; msg_txt[0] = '\0'; override_ind = 0; overrideType_ind = 0; rtab_ind = 0; maxrow_ind = 0; numrow_ind = -1; returnCode_ind = -1; returnMsg_ind = -1; /* get the price_value from some place, such as form data */ price_value = 1000.00 /* for example*/ /* specify the overwrite */ sprintf(overwrite, "SELECT o.order_key, customer, p.part_key, quantity, price, tax, ship_id, date, mode FROM order_tab o, part_tab p, table(select substr(char(timestamp(generate_unique())),16) as ship_id, date, mode from ship_tab)as s WHERE p.price > %d and s.date >'1996-06-01' AND p.order_key = o.order_key and s.part_key = p.part_key", price_value); /* Call the store procedure */ EXEC SQL CALL db2xml!dxxRetrieve(:collection:collection_ind, :result_tab:rtab_ind, :overrideType:overrideType_ind,:overwrite:overwrite_ind, :max_row:maxrow_ind,:num_row:numrow_ind, :returnCode:returnCode_ind,:returnMsg:returnMsg_ind);
order.dad 内の price > 2500.00 の条件は、 price > ? によってオーバーライドされます。 ここで ? は、入力変数 price_value に基づいています。
コレクション表の検索には通常の SQL 照会操作を使用できます。 コレクション表を結合するか、または副照会を使用してから、 テキスト列に対して構造化テキスト検索を実行することができます。 構造化検索の結果を使用して、 指定した XML 文書の取り出しまたは生成にそのデータを適用することができます。