XML Extender Verwaltung und Programmierung

Werte in der DAD-Datei dynamisch überschreiben

Für dynamische Abfragen können Sie zwei wahlfreie Parameter zum Überschreiben der Bedingungen in der DAD-Datei verwenden: override und overrideType. Entsprechend der Eingabe von overrideType kann die Anwendung die Befehlswerte <SQL_stmt> für die SQL-Zuordnung überschreiben oder die Bedingungen in RDB_nodes für die RDB_node-Zuordnung in der DAD-Datei.

Diese Parameter haben folgende Werte und Regeln:

overrideType
Dieser Parameter ist ein erforderlicher Eingabeparameter (IN), der den Typ des Parameters override angibt. overrideType kann die folgenden Werte haben:

NO_OVERRIDE
Gibt an, daß eine Bedingung in der DAD-Datei nicht überschrieben werden soll.

SQL_OVERRIDE
Gibt an, daß eine Bedingung in der DAD-Datei durch eine SQL-Anweisung überschrieben werden soll.

XML_OVERRIDE
Gibt an, daß eine Bedingung in der DAD-Datei durch eine XPath-Bedingung überschrieben werden soll.

override
Dieser Parameter ist ein wahlfreier Eingabeparameter (IN), der die override-Bedingung für die DAD-Datei angibt. Die Syntax für den Eingabewert entspricht dem für overrideType angegebenen Wert.

Beispiele:

Die folgenden Beispiele zeigen ein dynamisches Überschreiben mit SQL_OVERRIDE und XML_OVERRIDE. Die meisten gespeicherten Prozeduren in diesem Handbuch verwenden NO_OVERRIDE.

Beispiel: Eine gespeicherte Prozedur, die SQL_OVERRIDE verwendet.

include "dxx.h"
include "dxxrc.h"
 
       EXEC SQL INCLUDE SQLCA;
       EXEC SQL BEGIN DECLARE SECTION;
         char    collection[32];    /* DAD-Puffer */
         char    result_tab[32];    /* Name der Ergebnistabelle */
         char    override[256];     /* überschreiben, SQL_stmt */
         short   overrideType;      /* definiert in dxx.h */
         short   max_row;           /* maximale Anzahl Zeilen */
         short   num_row;           /* tatsächliche Anzahl Zeilen */
         long    returnCode;        /* Rückkehr-Fehlercode */
         char    returnMsg[1024];   /* Fehlernachrichtentext */
         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;
         
         /* Tabelle erstellen */
         EXEC CREATE TABLE xml_order_tab (xmlorder XMLVarchar);
 
         /* Host-Variable und Anzeiger initialisieren  */
         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;
 
        /* Gespeicherte Prozedur aufrufen */
         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); 

In diesem Beispiel muß das Element <xcollection> in der DAD-Datei ein Element <SQL_stmt> enthalten. Der Parameter override überschreibt den Wert von <SQL_stmt> durch Ändern des Preises auf einen Wert größer als 50.00, und das Datum wird auf Wert größer als 1998-12-01 geändert.

Beispiel: Eine gespeicherte Prozedur, die XML_OVERRIDE verwendet.

include "dxx.h"
include "dxxrc.h"
 
EXEC SQL INCLUDE SQLCA;
EXEC SQL BEGIN DECLARE SECTION;
         char    collection[32];  /* DAD-Puffer */
         char    result_tab[32];  /* Name der Ergebnistabelle */
         char    override[256];   /* überschreiben, SQL_stmt */
         short   overrideType;    /* definiert in dxx.h */
         short   max_row;         /* maximale Anzahl Zeilen */
         short   num_row;         /* tatsächliche Anzahl Zeilen */
         long    returnCode;      /* Rückkehr-Fehlercode */
         char    returnMsg[1024]; /* Fehlernachrichtentext */
         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;
         
         /* Tabelle erstellen */
         EXEC CREATE TABLE xml_order_tab (xmlorder XMLVarchar);
 
         /* Host-Variable und Anzeiger initialisieren  */
         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;
 
         /* Gespeicherte Prozedur aufrufen */
         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);

In diesem Beispiel hat das Element <collection> in der DAD-Datei einen RDB_node für den Root-element_node. Der Wert für override hängt vom XML-Wert ab. Der XML Extender wandelt den einfachen Standortpfad um in die zugeordnete DB2-Spalte um.


[ Seitenanfang | Vorherige Seite | Nächste Seite | Inhaltsverzeichnis | Index ]