動的な照会のためには、2 つの任意指定パラメーター override および overrideType を使用して、 DAD ファイル内の条件をオーバーライドすることができます。 overrideType からの入力に基づいて、 アプリケーションは DAD 内にある SQL マッピング用の <SQL_stmt> タグ値 または RDB_node マッピング用の RDB_nodes の条件をオーバーライドできます。
これらのパラメーターには、以下の値および規則があります。
.-AND----------------------------------------. V | >>----simple location path--+- =----+---value---+-------------->< +- >----+ +- <----+ +- <>---+ +- >=---+ +- <=---+ '- LIKE-'
ここで、
任意に、演算子をスペースで囲むことができます。 LIKE 演算子をスペースで囲むことは必須です。
XML_OVERRIDE 値を指定した場合、 単純ロケーション・パスと一致する text_node または attribute_node 内の RDB_node の条件は、 指定した式によってオーバーライドされます。
XML_OVERRIDE は、完全に XPath 準拠ではありません。 単純ロケーション・パスは、列にマップされる要素または属性を識別するためにのみ使用されます。
例:
以下の例は、SQL_OVERRIDE および XML_OVERRIDE を使用する動的なオーバーライドを示しています。 本書でのストアード・プロシージャー例のほとんどは、NO_OVERRIDE を使用します。
例: SQL_OVERRIDE を使用するストアード・プロシージャー
include "dxx.h" include "dxxrc.h" EXEC SQL INCLUDE SQLCA; EXEC SQL BEGIN DECLARE SECTION; char collection[32]; /* dad buffer */ char result_tab[32]; /* name of the result table */ char override[256]; /* override, SQL_stmt */ short overrideType; /* defined in dxx.h */ short max_row; /* maximum number of rows */ short num_row; /* actual number of rows */ long returnCode; /* return error code */ char returnMsg[1024]; /* error message text */ short rtab_ind; short ovtype_ind; short ov_inde; short maxrow_ind; short numrow_ind; short returnCode_ind; short returnMsg_ind; EXEC SQL END DECLARE SECTION; /* create table */ EXEC CREATE TABLE xml_order_tab (xmlorder XMLVarchar); /* initialize host variable and indicators */ strcpy(collection,"sales_ord"); strcpy(result_tab,"xml_order_tab"); sprintf(override,"%s %s %s %s %s %s %s", "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 > 50.00 and s.date >'1998-12-01' AND", "p.order_key = o.order_key and s.part_key = p.part_key"); overrideType = SQL_OVERRIDE; max_row = 500; num_row = 0; returnCode = 0; msg_txt[0] = '\0'; collection_ind = 0; rtab_ind = 0; ov_ind = 0; ovtype_ind = 0; maxrow_ind = 0; numrow_ind = -1; returnCode_ind = -1; returnMsg_ind = -1; /* Call the store procedure */ EXEC SQL CALL dxxRetrieve(:collection:collection_ind; :result_tab:rtab_ind, :overrideType:ovtype_ind,:override:ov_ind, :max_row:maxrow_ind,:num_row:numrow_ind, :returnCode:returnCode_ind,:returnMsg:returnMsg_ind);
この例で、DAD ファイル内の <xcollection> 要素には <SQL_stmt> 要素が必要です。 override パラメーターは、価格を 50.00 より大に変更し、 日付を 1998-12-01 より大に変更して、<SQL_stmt> の値をオーバーライドします。
例: XML_OVERRIDE を使用するストアード・プロシージャー
include "dxx.h" include "dxxrc.h" EXEC SQL INCLUDE SQLCA; EXEC SQL BEGIN DECLARE SECTION; char collection[32]; /* dad buffer */ char result_tab[32]; /* name of the result table */ char override[256]; /* override, SQL_stmt */ short overrideType; /* defined in dxx.h */ short max_row; /* maximum number of rows */ short num_row; /* actual number of rows */ long returnCode; /* return error code */ char returnMsg[1024]; /* error message text */ short dadbuf_ind; short rtab_ind; short ovtype_ind; short ov_inde; short maxrow_ind; short numrow_ind; short returnCode_ind; short returnMsg_ind; EXEC SQL END DECLARE SECTION; /* create table */ EXEC CREATE TABLE xml_order_tab (xmlorder XMLVarchar); /* initialize host variable and indicators */ strcpy(collection,"sales_ord"); strcpy(result_tab,"xml_order_tab"); sprintf(override,"%s %s", "/Order/Part/Price > 50.00 AND ", "Order/Part/Shipment/ShipDate > '1998-12-01'"); overrideType = XML_OVERRIDE; max_row = 500; num_row = 0; returnCode = 0; msg_txt[0] = '\0'; collection_ind = 0; rtab_ind = 0; ov_ind = 0; ovtype_ind = 0; maxrow_ind = 0; numrow_ind = -1; returnCode_ind = -1; returnMsg_ind = -1; /* Call the store procedure */ EXEC SQL CALL dxxRetrieve(:collection:collection_ind; :result_tab:rtab_ind, :overrideType:ovtype_ind,:override:ov_ind, :max_row:maxrow_ind,:num_row:numrow_ind, :returnCode:returnCode_ind,:returnMsg:returnMsg_ind);
この例で、DAD ファイル内の <collection> 要素には、 ルートの element_node に対して RDB_node があります。 override の値は XML の内容に基づいています。 XML エクステンダーは単純ロケーション・パスをマップ先 DB2 列に変更します。