IBM Books

Extension XML Administration et programmation

Remplacement dynamique de valeurs dans le fichier DAD

Pour les requêtes dynamiques, deux paramètres facultatifs permettent de remplacer des conditions dans le fichier DAD : override et overrideType. En fonction des données d'entrée du paramètre overrideType, l'application peut remplacer dans le fichier DAD les valeurs de la balise <SQL_stmt> par le mode de mappage SQL ou les conditions RDB_node par le mode de mappage du noeud RDB.

Ces paramètres sont associés aux valeurs et aux règles suivantes :

overrideType
Paramètre d'entrée (IN) obligatoire, précisant le type du paramètre override. overrideType peut prendre les valeurs suivantes :

NO_OVERRIDE
Indique de ne remplacer aucune condition dans le fichier DAD.

SQL_OVERRIDE
Indique de remplacer une condition du fichier DAD par une instruction SQL.

XML_OVERRIDE
Indique de remplacer une condition du fichier DAD par une condition basée sur XPath.

override
Paramètre d'entrée (IN) facultatif, précisant la condition override pour le fichier DAD. La valeur d'entrée dépend de la valeur du paramètre overrideType.

Exemples :

Les exemples ci-après illustrent le remplacement dynamique à l'aide de SQL_OVERRIDE et XML_OVERRIDE. La plupart des exemples de procédures mémorisées présentés dans ce manuel utilisent NO_OVERRIDE.

Exemple : Procédure mémorisée utilisant 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); 

Dans cet exemple, l'élément <xcollection> du fichier DAD doit être associé à un élément <SQL_stmt>. Le paramètre override remplace la valeur de l'élément <SQL_stmt>, le nouveau prix devant être supérieur à 50,00 et la nouvelle date postérieure au 1er décembre 1998 (1998-12-01).

Exemple : Procédure mémorisée utilisant 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);

Dans cet exemple, l'élément <collection> du fichier DAD est associé à un noeud RDB pour le noeud d'élément racine. La valeur du paramètre override est basée sur du contenu XML. L'Extension XML substitue la colonne DB2 mappée au chemin d'emplacement simple.


[ Début de page | Page précédente | Page suivante | Table des matières | Index ]