XML Extender Verwaltung und Programmierung

XML-Dokument zusammensetzen

Der XML Extender bietet zwei gespeicherte Prozeduren, dxxGenXML() und dxxRetrieveXML(), zum Zusammensetzen von XML-Dokumenten.

dxxGenXML()
Diese gespeicherte Prozedur wird für Anwendungen verwendet, die gelegentliche Aktualisierungen vornehmen, oder für Anwendungen, bei denen der Systemaufwand für die Verwaltung der XML-Daten eingespart werden soll. Die gespeicherte Prozedur dxxGenXML() erfordert keine aktivierte Objektgruppe und verwendet statt dessen eine DAD-Datei.

Die gespeicherte Prozedur dxxGenXML() konstruiert XML-Dokumente mit Hilfe von Daten in XML-Objektgruppentabellen, die über das Element <Xcollection> in der DAD-Datei angegeben sind. Diese gespeicherte Prozedur fügt jedes XML-Dokument als Zeile in eine Ergebnistabelle ein. Sie können auch einen Cursor in der Ergebnistabelle öffnen und die Ergebnisgruppe abrufen. Die Ergebnistabelle muß von der Anwendung erstellt werden; sie hat immer eine Spalte des Typs VARCHAR, CLOB, XMLVARCHAR oder XMLCLOB. Wenn Sie das Element für die Prüfung in der DAD-Datei auf YES setzen, fügt der XML Extender außerdem die Spalte DXX_VALID des Typs INTEGER hinzu und fügt den Wert 1 für ein gültiges XML-Dokument und 0 für ein ungültiges Dokument hinzu.

Die gespeicherte Prozedur dxxGenXML() ermöglicht außerdem die Angabe der maximalen Anzahl von Zeilen, die in der Ergebnistabelle generiert werden sollen. Auf diese Weise wird die Verarbeitungszeit verkürzt. Die gespeicherte Prozedur gibt die tatsächliche Anzahl von Zeilen in der Tabelle zusammen mit allen eventuellen Rückkehrcodes und Nachrichten zurück.

Die entsprechende gespeicherte Prozedur für das Zerlegen ist dxxShredXML(); sie verwendet ebenfalls die DAD-Datei als Eingabeparameter. Für diese Prozedur braucht die XML-Objektgruppe nicht aktiviert zu sein.

So erstellen Sie eine XML-Objektgruppe: dxxGenXML()

Integrieren Sie den Aufruf einer gespeicherten Prozedur in Ihrer Anwendung mit der folgenden Deklaration einer gespeicherten Prozedur:

dxxGenXML(CLOB(100K)     DAD,             /* Eingabe */
          char(UDB_SIZE) resultTabName,   /* Eingabe */
          integer        overrideType,    /* Eingabe */
          varchar(1024)  override,        /* Eingabe */
          integer        maxRows,         /* Eingabe */
          integer        numRows,         /* Ausgabe */
          long           returnCode,      /* Ausgabe */
          varchar(1024)  returnMsg)       /* Ausgabe */

Eine ausführliche Beschreibung der Syntax sowie Beispiele finden Sie im Abschnitt dxxGenXML().

Beispiel: Mit dem folgenden Beispiel wird ein XML-Dokument zusammengesetzt:

#include "dxx.h"
#include "dxxrc.h"
 
EXEC SQL INCLUDE SQLCA;
EXEC SQL BEGIN DECLARE SECTION;
     SQL TYPE is CLOB(100K) dad;              /* DAD */
     SQL TYPE is CLOB_FILE  dadFile;          /* DAD-Datei */
     char                   result_tab[32];   /* Name der Ergebnistabelle */
     char                   override[2];      /* Überschreiben, auf NULL gesetzt*/
     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                  dad_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);
 
     /* Daten aus einer Datei in ein CLOB einlesen */
     strcpy(dadfile.name,"c:\dxx\samples\dad\getstart_xcollection.dad");
     dadfile.name_length = strlen("c:\dxx\samples\dad\getstart_xcollection.dad");
     dadfile.file_options = SQL_FILE_READ;
     EXEC SQL VALUES (:dadfile) INTO :dad;
     strcpy(result_tab,"xml_order_tab");
     override[0] = '\0';
     overrideType = NO_OVERRIDE;
     max_row = 500;
     num_row = 0;
     returnCode = 0;
     msg_txt[0] = '\0';
     collection_ind = 0;
     dad_ind = 0;
     rtab_ind = 0;
     ov_ind = -1;
     ovtype_ind = 0;
     maxrow_ind = 0;
     numrow_ind = -1;
     returnCode_ind = -1;
     returnMsg_ind = -1;
 
     /* Gespeicherte Prozedur aufrufen */
     EXEC SQL CALL dxxGenXML(:dad:dad_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); 

Die Ergebnistabelle enthält nach dem Aufrufen der gespeicherten Prozedur 250 Zeilen, da die in der DAD-Datei angegebene SQL-Abfrage 250 XML-Dokumente generiert hatte.

dxxRetrieveXML()
Diese gespeicherte Prozedur wird für Anwendungen verwendet, die regelmäßige Aktualisierungen vornehmen. Da dieselben Tasks wiederholt ausgeführt werden, ist die Verbesserung der Leistung von großer Bedeutung. Das Aktivieren einer XML-Objektgruppe und die Verwendung des Gruppennamens in der gespeicherten Prozedur verbessert die Leistung.

Die gespeicherte Prozedur dxxRetrieveXML() funktioniert wie die gespeicherte Prozedur dxxGenXML() mit dem Unterschied, daß sie den Namen einer aktivierten XML-Objektgruppe statt einer DAD-Datei verwendet. Wenn eine XML-Objektgruppe aktiviert ist, wird eine DAD-Datei in der Tabelle XML_USAGE gespeichert. Der XML Extender ruft daher die DAD-Datei ab; von dieser Stelle ab ist dxxRetrieveXML() identisch mit dxxGenXML().

dxxRetrieveXML() ermöglicht die Verwendung derselben DAD-Datei beim Zusammensetzen und Zerlegen. Die gespeicherte Prozedur kann auch zum Abrufen zerlegter XML-Dokumente verwendet werden.

Die entsprechende gespeicherte Prozedur für das Zerlegen ist dxxInsertXML(); sie verwendet ebenfalls den Namen einer aktivierten XML-Objektgruppe.

So erstellen Sie eine XML-Objektgruppe: dxxRetrieveXML()

Integrieren Sie den Aufruf einer gespeicherten Prozedur in Ihrer Anwendung mit der folgenden Deklaration einer gespeicherten Prozedur:

dxxRetrieveXML(char(UDB_SIZE) collectionName,  /* Eingabe */
               char(UDB_SIZE) resultTabName,   /* Eingabe */
               integer        overrideType,    /* Eingabe */
               varchar(1024)  override,        /* Eingabe */
               integer        maxRows,         /* Eingabe */
               integer        numRows,         /* Ausgabe */
               long           returnCode,      /* Ausgabe */
               varchar(1024)  returnMsg)       /* Ausgabe */

Eine ausführliche Beschreibung der Syntax sowie Beispiele finden Sie im Abschnitt dxxRetrieveXML().

Beispiel: Das folgende Beispiel zeigt einen Aufruf von dxxRetrieveXML(). Dabei wird davon ausgegangen, daß die Ergebnistabelle mit dem Namen XML_ORDER_TAB erstellt wird und eine Spalte des Typs XMLVARCHAR enthält.

#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[2];      /* Überschreiben, auf NULL gesetzt*/
              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 SQL CREATE TABLE xml_order_tab (xmlorder XMLVarchar);
 
              /* Host-Variable und Anzeiger initialisieren  */
              strcpy(collection,"sales_ord");
              strcpy(result_tab,"xml_order_tab");
              override[0] = '\0';
              overrideType = NO_OVERRIDE;
              max_row = 500;
              num_row = 0;
              returnCode = 0;
              msg_txt[0] = '\0';
              collection_ind = 0;
              rtab_ind = 0;
              ov_ind = -1;
              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);


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