IBM Books

管理およびプログラミングの手引き

DAD ファイル内の値を動的にオーバーライドする

動的な照会のためには、2 つの任意指定パラメーター override および overrideType を使用して、 DAD ファイル内の条件をオーバーライドすることができます。 overrideType からの入力に基づいて、 アプリケーションは DAD 内にある SQL マッピング用の <SQL_stmt> タグ値 または RDB_node マッピング用の RDB_nodes の条件をオーバーライドできます。

これらのパラメーターには、以下の値および規則があります。

overrideType
このパラメーターは必須入力パラメーター (IN) であり、 override パラメーターのタイプにフラグを付けます。 overrideType には以下の値があります。

NO_OVERRIDE
DAD ファイル内の条件をオーバーライドしないことを指定します。

SQL_OVERRIDE
DAD ファイル内の条件を SQL ステートメントによってオーバーライドすることを指定します。

XML_OVERRIDE
DAD ファイル内の条件を XPath に基づく条件によってオーバーライドすることを指定します。

override
このパラメーターは必須入力パラメーター (IN) であり、 DAD ファイルをオーバーライドする条件を指定します。 入力値構文は、overrideType で指定した値に対応します。

例:

以下の例は、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 列に変更します。


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]