Mediante el XML Extender, puede recuperar un documento completo o el contenido de elementos y atributos. Cuando recupera directamente una columna XML, el XML Extender devuelve el UDT como tipo de columna. Para obtener detalles sobre la recuperación de datos, vea las secciones siguientes:
El XML Extender proporciona dos métodos para recuperar datos:
funciones predefinidas de conversión de datos y la UDF sobrecargada
Content(). La Tabla 11 muestra cuándo utilizar cada método.
Tabla 11. Funciones de recuperación del XML Extender
Tipo XML | Recuperar de DB2 como... | ||
---|---|---|---|
VARCHAR | CLOB | FILE | |
XMLVARCHAR | VARCHAR | N/A | Content() |
XMLCLOB | N/A | XMLCLOB | Content() |
XMLFILE | N/A | Content() | FILE |
Visión general de las tareas:
El XML Extender proporciona dos métodos para recuperar datos:
Tabla 12. Funciones predefinidas de conversión de datos del XML Extender
Conversión de datos utilizada en cláusula SELECT | Tipo devuelto | Descripción |
---|---|---|
varchar(XMLVARCHAR) | VARCHAR | Documento XML en VARCHAR |
clob(XMLCLOB) | CLOB | Documento XML en CLOB |
varchar(XMLFile) | VARCHAR | Nombre de archivo XML en VARCHAR |
EXEC SQL SELECT db2xml.varchar(order) from sales_tab
Por ejemplo, puede almacenar el documento XML en forma de XMLFILE y, si desea utilizarlo en la memoria, puede utilizar la UDF Content(), que puede tomar un tipo de datos XMLFILE como entrada y devolver un CLOB.
La UDF Content() realiza dos funciones de recuperación diferentes, dependiendo del tipo de datos especificado: Esta UDF:
De XMLFILE a CLOB: Recupera datos de un archivo y los exporta a un localizador de CLOB.
Content(objxml XMLFile)
De tipo XML a archivo externo: Recupera un documento XML que está almacenado como tipo de datos XML y lo exporta a un archivo externo.
Content(xmlobj XML type, nombreArchivo varchar(512))
Donde:
El ejemplo siguiente es un pequeño segmento de programa escrito en C que contiene SQL incorporado; este programa recupera un documento XML de un archivo y lo coloca en la memoria. En este ejemplo se supone que la columna BOOK es de tipo XMLFILE.
EXEC SQL BEGIN DECLARE SECTION; SQL TYPE IS CLOB_LOCATOR xml_buff; EXEC SQL END DECLARE SECTION; EXEC SQL CONNECT TO SALES_DB EXEC SQL DECLARE c1 CURSOR FOR SELECT Content(order) from sales_tab EXEC SQL OPEN c1; do { EXEC SQL FETCH c1 INTO :xml_buff; if (SQLCODE != 0) { break; } else { /* aquí se indican las operaciones hechas sobre el doc XML */ /* del almacenamiento intermedio */ } } EXEC SQL CLOSE c1; EXEC SQL CONNECT RESET;
Puede recuperar (extraer) el contenido de un elemento o el valor de un atributo en uno o más documentos XML (búsqueda en documento individual o en documento de colección). El XML Extender proporciona funciones de extracción definidas por el usuario que puede especificar en una cláusula SELECT para cada tipo de datos SQL.
Recuperar el contenido de elementos y valores de atributos es útil en el desarrollo de aplicaciones, pues le permite acceder a datos XML en forma de datos relacionales. Por ejemplo, suponga que tiene 1000 documentos XML almacenados en la columna ORDER de la tabla SALES_TAB. Puede recuperar los nombres de todos los clientes que han hecho pedido de artículos; para ello utilice la siguiente sentencia de SQL cuya cláusula SELECT contiene la UDF de extracción:
SELECT extractVarchar(Order, '/Order/Customer/Name') from sales_order_view WHERE price > 2500.00
En este ejemplo, la UDF de extracción recupera el elemento <customer> de la columna ORDER, devolviendo el resultado en el tipo de datos VARCHAR. La vía de ubicación es /Order/Customer/Name (vea Vía de ubicación para obtener la sintaxis de la vía de ubicación). Además, el número de valores devueltos se puede disminuir utilizando una cláusula WHERE, que especifica los elementos <customer> cuyo subelemento <ExtendedPrice> tiene un valor mayor que 2500,00.
Para extraer el contenido de elementos o valores de atributos: Utilice las UDF de extracción que aparecen en la Tabla 13; utilice la sintaxis siguiente como función de tabla o función escalar:
extracttipoDatos_recuperado(objxml, vía)
Donde:
La Tabla 13 muestra las funciones de extracción, en el formato escalar y
de tabla:
Tabla 13. Funciones de extracción del XML Extender
Función escalar | Función de tabla | Nombre de columna devuelto (función de tabla) | Tipo devuelto |
---|---|---|---|
extractInteger() | extractIntegers() | returnedInteger | INTEGER |
extractSmallint() | extractSmallints() | returnedSmallint | SMALLINT |
extractDouble() | extractDoubles() | returnedDouble | DOUBLE |
extractReal() | extractReals() | returnedReal | REAL |
extractChar() | extractChars() | returnedChar | CHAR |
extractVarchar() | extractVarchars() | returnedVarchar | VARCHAR |
extractCLOB() | extractCLOBs() | returnedCLOB | CLOB |
extractDate() | extractDates() | returnedDate | DATE |
extractTime() | extractTimes() | returnedTime | TIME |
extractTimestamp() | extractTimestamps() | returnedTimestamp | TIMESTAMP |