Los procedimientos almacenados de composición, dxxGenXML() y dxxRetrieveXML(), se utilizan para generar documentos XML a partir de datos XML existentes en tablas de base de datos. El procedimiento almacenado dxxGenXML() utiliza como entrada un archivo DAD; no necesita una colección XML habilitada. El procedimiento dxxRetrieveXML() utiliza como entrada un nombre de colección XML habilitada.
Finalidad
Crea documentos XML utilizando datos almacenados en tablas de colección XML, que están especificadas por el elemento <Xcollection> en el archivo DAD, e inserta cada documento XML en la tabla resultante en calidad de fila. El usuario también puede abrir un cursor en la tabla resultante y obtener el conjunto resultante.
Para proporcionar flexibilidad, dxxGenXML() también permite al usuario especificar el número máximo de filas que se han de generar en la tabla resultante. Esto disminuye la cantidad de tiempo que la aplicación debe esperar los resultados durante un proceso de prueba. El procedimiento almacenado devuelve el número de filas de la tabla y la información de error producida, que incluye los códigos de error y los mensajes de error.
Para permitir realizar consultas dinámicas, dxxGenXML() admite el parámetro de entrada alter_temp (alteración temporal). Basándose en el valor de tipo_alter_temp, la aplicación puede anular la sentencia SQL_stmt, para la correlación SQL, o las condiciones del nodo_RDB, para la correlación de nodo_RDB, en el archivo DAD. El parámetro de entrada tipo_alter_temp se utiliza para especificar el tipo de alteración temporal. Para obtener detalles sobre el parámetro alter_temp, vea Anulación dinámica de valores en el archivo DAD.
dxxGenXML(CLOB(100K) DAD, /* entrada */ char(UDB_SIZE) nombreTabResul /* entrada */ integer tipo_alter_temp /* entrada */ varchar(1024) alter_temp, /* entrada */ integer máxFilas, /* entrada */ integer númFilas, /* salida */ long códigoRetorno, /* salida */ varchar(1024) mensRetorno) /* salida */
Parámetros
Tabla 46. Parámetros de dxxGenXML()
Parámetro | Descripción | Parámetro de E/S |
---|---|---|
DAD | Es un CLOB donde reside el archivo DAD. | ENTRADA |
nombreTabResul | Es el nombre de la tabla resultante, la cual debe existir antes de ejecutar la llamada. La tabla contiene una sola columna, de tipo XMLVARCHAR o XMLCLOB. | ENTRADA |
tipo_alter_temp | Es un distintivo que indica el tipo del parámetro alter_temp que
sigue a continuación:
| ENTRADA |
alter_temp | Invalida la condición especificada en el archivo DAD. El valor de
entrada está basado en tipo_alter_temp.
| ENTRADA |
máxFilas | Es el número máximo de filas de la tabla resultante. | ENTRADA |
númFilas | Es el número real de filas creadas de la tabla resultante. | SALIDA |
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, se crea la tabla resultante XML_ORDER_TAB, la cual tiene una sola columna de tipo XMLVARCHAR.
#include "dxx.h" #include "dxxrc.h" EXEC SQL INCLUDE SQLCA; EXEC SQL BEGIN DECLARE SECTION; SQL TYPE is CLOB(100K) dad; /* DAD */ SQL TYPE is CLOB_FILE dadFile; /* archivo DAD */ char result_tab[32]; /* nombre de la tabla resultante */ char override[2]; /* alteración temporal, para nulo */ short overrideType; /* definido en dxx.h */ short max_row; /* número máximo de filas */ short num_row; /* número real de filas */ long returnCode; /* código de error de retorno */ char returnMsg[1024]; /* texto del mensaje de error */ short dad_ind; short rtab_ind; short ovtype_ind; short ov_inde; short maxrow_ind; short numrow_ind; short returnCode_ind; short returnMsg_ind; EXEC SQL END DECLARE SECTION; /* crear tabla */ EXEC CREATE TABLE xml_order_tab (xmlorder XMLVarchar); /* leer datos de un archivo y ponerlos en un CLOB */ strcpy(dadfile.name,"e:\dxx\dad\litem3.dad"); dadfile.name_length = strlen("e:\dxx\dad\litem3.dad"); dadfile.file_options = SQL_FILE_READ; EXEC SQL VALUES (:dadfile) INTO :dad; strcpy(result_tab,"xml_order_tab"); override[0] = '\0'; overrideType = NO_OVERRIDE; max_row = 500; num_row = 0; returnCode = 0; msg_txt[0] = '\0'; collection_ind = 0; dad_ind = 0; rtab_ind = 0; ov_ind = -1; ovtype_ind = 0; maxrow_ind = 0; numrow_ind = -1; returnCode_ind = -1; returnMsg_ind = -1; /* Llamar al procedimiento almacenado */ EXEC SQL CALL dxxGenXML(:dad:dad_ind; :result_tab:rtab_ind, :overrideType:ovtype_ind,:override:ov_ind, :max_row:maxrow_ind,:num_row:numrow_ind, :returnCode:returnCode_ind,:returnMsg:returnMsg_ind);
Finalidad
Permite que un mismo archivo DAD sea utilizado tanto para la composición como para la descomposición. El procedimiento almacenado dxxRetrieveXML() también sirve para recuperar documentos XML descompuestos. dxxRetrieveXML() utiliza como entrada un almacenamiento intermedio donde está el archivo DAD, el nombre de la tabla resultante creada y el número máximo de filas a devolver. Devuelve un conjunto resultante formado por la tabla resultante, el número real de filas del conjunto resultante, un código de error y un texto de mensaje.
Para permitir realizar consultas dinámicas, dxxRetrieveXML() admite el parámetro de entrada alter_temp (alteración temporal). Basándose en el valor de tipo_alter_temp, la aplicación puede anular la sentencia SQL_stmt, para la correlación SQL, o las condiciones del nodo_RDB, para la correlación de nodo_RDB, en el archivo DAD. El parámetro de entrada tipo_alter_temp se utiliza para especificar el tipo de alteración temporal. Para obtener detalles sobre el parámetro alter_temp, vea Anulación dinámica de valores en el archivo DAD.
Los requisitos del archivo DAD para dxxRetrieveXML() son los mismos que para dxxGenXML(). La única diferencia es que el archivo DAD no es un parámetro de entrada de dxxRetrieveXML(), sino que se utiliza el nombre de una colección XML habilitada.
dxxRetrieveXML(char(UDB_SIZE) nombreColección, /* entrada */ char(UDB_SIZE) nombreTabResul /* entrada */ integer tipo_alter_temp, /* entrada */ varchar(1024) alter_temp, /* entrada */ integer máxFilas, /* entrada */ integer númFilas, /* salida */ long códigoRetorno, /* salida */ varchar(1024) mensRetorno) /* salida */
Parámetros
Tabla 47. Parámetros de dxxRetrieveXML()
Parámetro | Descripción | Parámetro de E/S |
---|---|---|
nombreColección | Es el nombre de una colección XML habilitada. | ENTRADA |
nombreTabResul | Es el nombre de la tabla resultante, la cual debe existir antes de ejecutar la llamada. La tabla contiene una sola columna, de tipo XMLVARCHAR o XMLCLOB. | ENTRADA |
tipo_alter_temp | Es un distintivo que indica el tipo del parámetro alter_temp que
sigue a continuación:
| ENTRADA |
alter_temp | Invalida la condición especificada en el archivo DAD. El valor de
entrada está basado en tipo_alter_temp.
| ENTRADA |
máxFilas | Es el número máximo de filas de la tabla resultante. | ENTRADA |
númFilas | Es el número real de filas creadas de la tabla resultante. | SALIDA |
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 dxxRetrieveXML(). En este ejemplo, se crea la tabla resultante XML_ORDER_TAB, la cual tiene una sola columna de tipo XMLVARCHAR.
#include "dxx.h" #include "dxxrc.h" EXEC SQL INCLUDE SQLCA; EXEC SQL BEGIN DECLARE SECTION; char collection[32]; /* almacenamiento intermedio con DAD */ char result_tab[32]; /* nombre de la tabla resultante */ char override[2]; /* alteración temporal, para nulo */ short overrideType; /* definido en dxx.h */ short max_row; /* número máximo de filas */ short num_row; /* número real de filas */ long returnCode; /* código de error de retorno */ char returnMsg[1024]; /* texto del mensaje de error */ short dadbuf_ind; short rtab_ind; short ovtype_ind; short ov_inde; short maxrow_ind; short numrow_ind; short returnCode_ind; short returnMsg_ind; EXEC SQL END DECLARE SECTION; /* crear tabla */ EXEC SQL CREATE TABLE xml_order_tab (xmlorder XMLVarchar); /* inicializar variable de lenguaje principal e indicadores */ strcpy(collection,"sales_ord"); strcpy(result_tab,"xml_order_tab"); override[0] = '\0'; overrideType = NO_OVERRIDE; max_row = 500; num_row = 0; returnCode = 0; msg_txt[0] = '\0'; collection_ind = 0; rtab_ind = 0; ov_ind = -1; ovtype_ind = 0; maxrow_ind = 0; numrow_ind = -1; returnCode_ind = -1; returnMsg_ind = -1; /* Llamar al procedimiento almacenado */ EXEC SQL CALL dxxRetrieve(:collection:collection_ind; :result_tab:rtab_ind, :overrideType:ovtype_ind,:override:ov_ind, :max_row:maxrow_ind,:num_row:numrow_ind, :returnCode:returnCode_ind,:returnMsg:returnMsg_ind);