Der XML Extender bietet zwei gespeicherte Prozeduren, dxxShredXML() und dxxInsertXML(), zum Zerlegen von XML-Dokumenten.
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);
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);