IBM Books

Extension XML Administration et programmation

Décomposition du document XML

L'Extension XML comporte deux procédures mémorisées, dxxShredXML() et dxxInsertXML(), pour décomposer des documents XML.

dxxShredXML()
Cette procédure mémorisée est utilisée pour les applications qui exécutent des mises à jour occasionnelles ou qui ne veulent pas se charger de l'administration des données XML. Elle ne nécessite pas l'activation d'une collection, mais a recours à un fichier DAD.

La procédure mémorisée dxxShredXML() utilise deux paramètres d'entrée, un fichier DAD et le document XML à décomposer. Elle renvoie deux paramètres de sortie, un code et un message retour.

La procédure mémorisée dxxShredXML() insère un document XML dans une collection XML conformément à la spécification <Xcollection> contenue dans le fichier DAD d'entrée. Les tables utilisées dans l'élément <Xcollection> du fichier DAD doivent exister et les colonnes respecter les types de données indiqués dans le mappage DAD. Si ces conditions ne sont pas remplies, un message d'erreur est renvoyé. Ensuite, la procédure mémorisée dxxShredXML() décompose le document XML et insère les données XML non balisées dans les tables indiquées dans le fichier DAD.

La procédure de composition correspondante est dxxGenXML(). Cette dernière utilise également la DAD comme paramètre d'entrée et ne nécessite pas l'activation d'une collection XML.

Pour décomposer une collection XML : dxxShredXML()

Imbriquez un appel de procédure mémorisée dans votre application par la déclaration suivante :

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

Pour consulter la syntaxe complète et des exemples, reportez-vous à la section dxxShredXML().

Exemple : Voici un exemple d'appel de la procédure 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 file*/
         SQL TYPE is CLOB      xmlDoc;          /* input XML document */
         SQL TYPE is CLOB_FILE xmlFile;          /* input XML file */
         long                  returnCode;       /* error code */
         char                  returnMsg[1024];  /* error message text */
         short                 dad_ind;
         short                 xmlDoc_ind;
         short                 returnCode_ind;
         short                 returnMsg_ind;
  EXEC SQL END DECLARE SECTION;
 
         /* initialize host variable and indicators */
        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;
 
         /* Call the store procedure */
        EXEC SQL CALL db2xml!dxxShredXML(:dad:dad_ind;
                      :xmlDoc:xmlDoc_ind,
                      :returnCode:returnCode_ind,:returnMsg:returnMsg_ind); 

dxxInsertXML()
Cette procédure mémorisée est utilisée pour les applications qui exécutent des mises à jour régulières. En raison de la répétition des mêmes tâches, il est important d'optimiser les performances. C'est ce que permet l'activation d'une collection XML et l'utilisation de son nom dans la procédure mémorisée. La procédure mémorisée dxxInsertXML() fonctionne comme dxxShredXML(), excepté qu'elle utilise une collection XML activée comme premier paramètre d'entrée.

La procédure mémorisée dxxInsertXML() insère un document XML dans une collection XML activée, associée à un fichier DAD. Ce dernier contient des spécifications relatives aux tables de la collection et au mappage. Les tables de la collection sont vérifiées ou créées en fonction des spécifications contenues dans l'élément <Xcollection>. Ensuite, la procédure mémorisée dxxInsertXML() décompose le document XML en fonction du mappage et insère les données XML non balisées dans les tables de la collection XML indiquée.

La procédure de composition correspondante est dxxRetrieveXML(). Cette dernière utilise également une collection XML activée.

Pour décomposer une collection XML : dxxInsertXML()

Imbriquez un appel de procédure mémorisée dans votre application par la déclaration suivante :

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

Pour consulter la syntaxe complète et des exemples, reportez-vous à la section dxxInsertXML().

Exemple : Voici un exemple d'appel de la procédure dxxInsertXML() :

#include "dxx.h"
#include "dxxrc.h"
 
EXEC SQL INCLUDE SQLCA;
 
EXEC SQL BEGIN DECLARE SECTION;
         char                  collection[64];   /* name of an XML collection */
         SQL TYPE is CLOB_FILE xmlFile;          /* input XML file */
         SQL TYPE is CLOB      xmlDoc;           /* input XML doc */
         long                  returnCode;       /* error code */
         char                  returnMsg[1024];  /* error message text */
         short                 collection_ind;
         short                 xmlDoc_ind;
         short                 returnCode_ind;
         short                 returnMsg_ind;
  EXEC SQL END DECLARE SECTION;
         
         /* initialize host variable and indicators */
         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;
 
         /* Call the store procedure */
         EXEC SQL CALL db2xml!dxxInsertXML(:collection:collection_ind;
                      :xmlDoc:xmlDoc_ind,
                      :returnCode:returnCode_ind,:returnMsg:returnMsg_ind); 


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