IBM Books

Administración y programación


Procedimientos almacenados de descomposición

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.

dxxShredXML()

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); 

dxxInsertXML()

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); 


[ Principio de página | Página anterior | Página siguiente | Contenido | Índice ]