IBM Books

Administración y programación


Recuperación de datos

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

Recuperación de un documento completo

Visión general de las tareas:

  1. Asegúrese de que ha almacenado el documento en una tabla XML y determine qué datos desea recuperar.
  2. Elija un método para recuperar los datos de la tabla DB2 (funciones de conversión de datos o funciones UDF).
  3. Si utiliza la UDF Content(), determine qué tipo de datos se recupera y qué tipo de datos se debe exportar.
  4. Mediante una consulta SQL, especifique la tabla y columna XML donde reside el documento XML que se debe recuperar.

El XML Extender proporciona dos métodos para recuperar datos:

Uso de una función predefinida de conversión de datos
Utilice la función predefinida de conversión de datos, proporcionada por DB2 para los UDT, para convertir un UDT XML en un tipo base SQL, y luego trabajar sobre él. Para recuperar datos, puede utilizar funciones de conversión de datos, proporcionadas por el XML Extender, en una sentencia SELECT. La Tabla 12 muestra la funciones de conversión de datos proporcionadas:


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
Ejemplo: El ejemplo siguiente recupera los datos XMLVARCHAR y los almacena utilizando el tipo de datos VARCHAR:

EXEC SQL SELECT db2xml.varchar(order) from sales_tab

Uso de la UDF sobrecargada Content()
Utilice la UDF Content() para recuperar un documento del almacenamiento externo y colocarlo en la memoria, o para exportar el documento desde el almacenamiento interno al archivo externo del servidor DB2.

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:

Recupera un documento del almacenamiento externo y lo coloca en la memoria
Puede utilizar Content() para recuperar un documento XML y colocarlo en una memoria intermedia o en un localizador de CLOB cuando el documento está almacenado como archivo externo. Utilice la siguiente sintaxis de función, en la que objxml es la columna XML que es objeto de la consulta:

De XMLFILE a CLOB: Recupera datos de un archivo y los exporta a un localizador de CLOB.

Content(objxml XMLFile)

Recupera un documento del almacenamiento interno y lo exporta a un archivo externo
También puede utilizar Content() para recuperar un documento XML, que está almacenado en DB2 como un tipo de datos XMLCLOB, y exportarlo a un archivo del sistema de archivos del servidor de bases de datos. Content() devuelve el nombre del archivo del tipo VARCHAR. Utilice la siguiente sintaxis de función, en la que objxml es la columna XML que es objeto de la consulta y nombreArchivo es el archivo externo. tipo XML puede ser el tipo de datos XMLVARCHAR o XMLCLOB.

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:

objxml
Es el nombre de la columna XML donde reside el contenido XML que se debe recuperar; objxml puede ser de tipo XMLVARCHAR o XMLCLOB.

nombreArchivo
Es el nombre del archivo donde se deben almacenar los datos XML.

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;

Recuperación del contenido de elementos y de valores de atributos

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:

tipoDatos_recuperado
Es el tipo de datos que devuelve la función de extracción; puede ser uno de los tipos siguientes:

objxml
Es el nombre de la columna XML donde reside el elemento o atributo que se debe extraer. Esta columna debe estar definida como perteneciente a uno de los siguientes UDT (tipos definidos por el usuario) de XML:

vía
Es la vía de ubicación del elemento o atributo del documento XML (como por ejemplo /Order/Customer/Name). Vea Vía de ubicación para obtener la sintaxis de la vía de acceso a la ubicación.

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


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