L'Extension XML comporte deux procédures mémorisées, dxxShredXML() et dxxInsertXML(), pour décomposer des documents XML.
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);
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);