XML Extender Verwaltung und Programmierung

XML-Dokument zerlegen

Der XML Extender bietet zwei gespeicherte Prozeduren, dxxShredXML() und dxxInsertXML(), zum Zerlegen von XML-Dokumenten.

dxxShredXML()
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 dxxShredXML() erfordert keine aktivierte Objektgruppe und verwendet statt dessen eine DAD-Datei.

Die gespeicherte Prozedur dxxShredXML() verwendet zwei Eingabeparameter: eine DAD-Datei und das zu zerlegende XML-Dokument; sie gibt zwei Ausgabeparameter aus: einen Rückkehrcode und eine Rückkehrnachricht.

Die gespeicherte Prozedur dxxShredXML() fügt entsprechend der Angabe <Xcollection> in der DAD-Datei ein XML-Dokument in eine XML-Objektgruppe ein. Es wird davon ausgegangen, daß die im Element <Xcollection> der DAD-Datei verwendeten Tabellen vorhanden sind und daß die Spalten den in der DAD-Zuordnung angegebenen Datentypen entsprechen. Ist dies nicht der Fall, wird eine Fehlernachricht zurückgegeben. Die gespeicherte Prozedur dxxShredXML() zerlegt anschließend das XML-Dokument und fügt unmarkierte XML-Daten in die in der DAD-Datei angegebenen Tabellen ein.

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

So zerlegen Sie eine XML-Objektgruppe: dxxShredXML()

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

dxxShredXML(CLOB(100K)    DAD,            /* Eingabe */
            CLOB(1M)      xmlobj,         /* Eingabe */
            long          returnCode,     /* Ausgabe */
            varchar(1024) returnMsg)      /* Ausgabe */

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

Beispiel: Das folgende Beispiel zeigt einen Aufruf von dxxShredXML():

#include "dxx.h"
#include "dxxrc.h"
 
EXEC SQL INCLUDE SQLCA;
        EXEC SQL BEGIN DECLARE SECTION;
         SQL TYPE is CLOB      dad;             /* DAD*/
         SQL TYPE is CLOB_FILE dadFile;         /* DAD-Datei */
         SQL TYPE is CLOB      xmlDoc;          /* XML-Eingabedokument */
         SQL TYPE is CLOB_FILE xmlFile;         /* Eingabe-XML-Datei */
         long                  returnCode;      /* Fehlercode */
         char                  returnMsg[1024]; /* Fehlernachrichtentext */
         short                 dad_ind;
         short                 xmlDoc_ind;
         short                 returnCode_ind;
         short                 returnMsg_ind;
        EXEC SQL END DECLARE SECTION;
 
         /* Host-Variable und Anzeiger initialisieren  */
        strcpy(dadFile.name,"c:\dxx\samples\dad\getstart_xcollection.dad");
        dadFile.name_length=strlen("c:\dxx\samples\dad\getstart_xcollection.dad");
        dadFile.file_option=SQL_FILE_READ;
        strcpy(xmlFile.name,"c:\dxx\samples\cmd\getstart_xcollection.xml");
        xmlFile.name_length=strlen("c:\dxx\samples\cmd\getstart_xcollection.xml");
        xmlFile.file_option=SQL_FILE_READ;
        SQL EXEC VALUES (:dadFile) INTO :dad;
        SQL EXEC VALUES (:xmlFile) INTO :xmlDoc;
        returnCode = 0;
        returnMsg[0] = '\0';
        dad_ind = 0;
        xmlDoc_ind = 0;
        returnCode_ind = -1;
        returnMsg_ind = -1;
 
        /* Gespeicherte Prozedur aufrufen */
        EXEC SQL CALL db2xml!dxxShredXML(:dad:dad_ind;
                     :xmlDoc:xmlDoc_ind,
                     :returnCode:returnCode_ind,:returnMsg:returnMsg_ind); 

dxxInsertXML()
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 dxxInsertXML() funktioniert genau wie dxxShredXML() mit dem Unterschied, daß dxxInsertXML() eine aktivierte XML-Objektgruppe als ersten Eingabeparameter verwendet.

Die gespeicherte Prozedur dxxInsertXML() fügt ein XML-Dokument in eine aktivierte XML-Objektgruppe, die einer DAD-Datei zugeordnet ist, ein. Die DAD-Datei enthält Spezifikationen für die Gruppentabellen und die Zuordnung. Die Gruppentabellen werden entsprechend den Spezifikationen in der <Xcollection> geprüft oder erstellt. Die gespeicherte Prozedur dxxInsertXML() zerlegt anschließend das XML-Dokument entsprechend der Zuordnung und fügt unmarkierte XML-Daten in die Tabellen der benannten XML-Objektgruppe ein.

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

So zerlegen Sie eine XML-Objektgruppe: dxxInsertXML()

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

dxxInsertXML(char(UDB_SIZE) collectionName,   /* Eingabe */
             CLOB(1M)       xmlobj,           /* Eingabe */
             long           returnCode,       /* Ausgabe */
             varchar(1024)  returnMsg)        /* Ausgabe */

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

Beispiel: Das folgende Beispiel zeigt einen Aufruf von dxxInsertXML():

#include "dxx.h"
#include "dxxrc.h"
 
EXEC SQL INCLUDE SQLCA;
        EXEC SQL BEGIN DECLARE SECTION;
         char                  collection[64];   /* Name einer XML-Objektgruppe */
         SQL TYPE is CLOB_FILE xmlFile;          /* Eingabe-XML-Datei */
         SQL TYPE is CLOB      xmlDoc;           /* XML-Eingabedokument */
         long                  returnCode;       /* Fehlercode */
         char                  returnMsg[1024];  /* Fehlernachrichtentext */
         short                 collection_ind;
         short                 xmlDoc_ind;
         short                 returnCode_ind;
         short                 returnMsg_ind;
         EXEC SQL END DECLARE SECTION;
         
         /* Host-Variable und Anzeiger initialisieren  */
         strcpy(collection,"sales_ord")
         strcpy(xmlobj.name,"c:\dxx\samples\cmd\getstart_xcollection.xml");
         xmlobj.name_length=strlen("c:\dxx\samples\cmd\getstart_xcollection.xml");
         xmlobj.file_option=SQL_FILE_READ;
         SQL EXEC VALUES (:xmlFile) INTO (:xmlDoc);
         returnCode = 0;
         returnMsg[0] = '\0';
         collection_ind = 0;
         xmlobj_ind = 0;
         returnCode_ind = -1;
         returnMsg_ind = -1;
 
        /* Gespeicherte Prozedur aufrufen */
         EXEC SQL CALL db2xml!dxxInsertXML(:collection:collection_ind;
                      :xmlDoc:xmlDoc_ind,
                      :returnCode:returnCode_ind,:returnMsg:returnMsg_ind); 


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