Los procedimientos almacenados de descomposición, dxxInsertXML() y dxxShredXML(), se utilizan para desglosar documentos XML de entrada y almacenar datos en tablas de base de datos, nuevas o existentes. El procedimiento dxxInsertXML() utiliza como entrada un nombre de colección XML habilitada. El procedimiento almacenado dxxShredXML() utiliza como entrada un archivo DAD; no necesita una colección XML habilitada.
Finalidad
El procedimiento almacenado dxxShredXML() forma pareja con el procedimiento almacenado dxxGenXML(). Para que dxxShredXML() sea efectivo, todas las tablas especificadas en el archivo DAD deben existir, y todas las columnas y sus tipos de datos que están especificados en ese archivo DAD deben ser coherentes con las tablas existentes. El procedimiento almacenado dxxShredXML() no necesita que exista la relación clave primaria-clave foránea entre las tablas que se unen; esta relación es creada por el XML Extender durante el proceso de habilitación de la colección. Sin embargo, las columnas de la condición de unión que están especificadas en el nodo_RDB del nodo_de_elemento raíz deben existir en las tablas.
dxxShredXML(CLOB(100K) DAD, /* entrada */ CLOB(1M) xmlobj, /* entrada */ long códigoRetorno, /* salida */ varchar(1024) mensRetorno) /* salida */
Parámetros
Tabla 48. Parámetros de dxxShredXML()
Parámetro | Descripción | Parámetro de E/S |
---|---|---|
DAD | Es un CLOB donde reside el archivo DAD. | ENTRADA |
objxml | Es un objeto de documento XML cuyo tipo es XMLCLOB. | ENTRADA |
códigoRetorno | Es el código de retorno que emite el procedimiento almacenado. | SALIDA |
mensRetorno | Es el texto del mensaje que se devuelve en caso de error. | SALIDA |
Ejemplos
Lo siguiente es un ejemplo de una llamada a 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; /* archivo DAD */ SQL TYPE is CLOB xmlDoc; /* documento XML de entrada */ SQL TYPE is CLOB_FILE xmlFile; /* archivo XML de entrada */ long returnCode; /* código de error */ char returnMsg[1024]; /* texto del mensaje de error */ short dad_ind; short xmlDoc_ind; short returnCode_ind; short returnMsg_ind; EXEC SQL END DECLARE SECTION; /* inicializar variable de lenguaje principal e indicadores */ 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.xml"); xmlFile.name_length=strlen("c:\dxx\samples\cmd\getstart.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; /* Llamar al procedimiento almacenado */ EXEC SQL CALL db2xml!dxxShredXML(:dad:dad_ind; :xmlDoc:xmlDoc_ind, :returnCode:returnCode_ind,:returnMsg:returnMsg_ind);
Finalidad
Utiliza dos parámetros de entrada: el nombre de una colección XML habilitada y el documento que se debe descomponer; devuelve dos parámetros de salida: un código de retorno y un mensaje de retorno.
dxxInsertXML(char(UDB_SIZE) nombreColección, /* entrada */ CLOB(1M) xmlobj, /* entrada */ long códigoRetorno, /* salida */ varchar(1024) mensRetorno) /* salida */
Parámetros
Tabla 49. Parámetros de dxxInsertXML()
Parámetro | Descripción | Parámetro de E/S |
---|---|---|
nombreColección | Es el nombre de una colección XML habilitada. | ENTRADA |
objxml | Es un objeto de documento XML cuyo tipo es CLOB. | ENTRADA |
códigoRetorno | Es el código de retorno que emite el procedimiento almacenado. | SALIDA |
mensRetorno | Es el texto del mensaje que se devuelve en caso de error. | SALIDA |
Ejemplos
En el ejemplo siguiente, la llamada a dxxInsertXML() descompone el documento XML de entrada, e:\xml\order1.xml, e inserta datos en las tablas de colección SALES_ORDER de acuerdo con la correlación definida en el archivo DAD mediante el cual se habilitó el documento.
#include "dxx.h" #include "dxxrc.h" EXEC SQL INCLUDE SQLCA; EXEC SQL BEGIN DECLARE SECTION; char collection[64]; /* nombre de una colección XML */ SQL TYPE is CLOB_FILE xmlDoc; /* documento XML de entrada */ long returnCode; /* código de error */ char returnMsg[1024]; /* texto del mensaje de error */ short collection_ind; short xmlDoc_ind; short returnCode_ind; short returnMsg_ind; EXEC SQL END DECLARE SECTION; /* inicializar variable de lenguaje principal e indicadores */ strcpy(collection,"sales_ord") strcpy(xmlobj.name,"c:\dxx\samples\cmd\getstart.xml"); xmlobj.name_length=strlen("c:\dxx\samples\cmd\getstart.xml"); xmlobj.file_option=SQL_FILE_READ; returnCode = 0; returnMsg[0] = '\0'; collection_ind = 0; xmlobj_ind = 0; returnCode_ind = -1; returnMsg_ind = -1; /* Llamar al procedimiento almacenado */ EXEC SQL CALL db2xml!dxxInsertXML(:collection:collection_ind; :xmlobj:xmlobj_ind, :returnCode:returnCode_ind,:returnMsg:returnMsg_ind);