Exportar datos XML con KeepTool y Oracle XML DB

    Publicado 03. marzo 2023

    Actualizado en octubre de 2025


    Introducción

    Hola de nuevo. En nuestra serie de dos partes, mostramos cómo utilizar KeepTool 15 junto con Oracle XML DB. En el primer artículo, tratamos la creación de una interfaz de importación funcional para HR.EMPLOYEES. Ahora nos centraremos en la interfaz de exportación complementaria, concretamente en el manejo de una relación maestro/detalle entre HR.COUNTRIES (maestro) y HR.LOCATIONS (detalle). Al igual que antes, nos centraremos en lo esencial, lo que le dará una gran flexibilidad para ampliarlo según sea necesario.


    Creación de tipos PL/SQL

    Pretendemos exportar datos tanto de COUNTRIES como de LOCATIONS en el esquema HR. Dado que existe una relación de clave externa de LOCATIONS a COUNTRIES, nuestro XML debe anidar el detalle (LOCATIONS) dentro del maestro (COUNTRIES).

    En la página «Tables» (Tablas) de Hora, la pestaña maestro/detalle muestra un pequeño diagrama de relaciones directas. Hemos marcado tanto COUNTRIES como LOCATIONS para dejar claro qué tablas se verán afectadas por este ejemplo de exportación.

    Flagging both the COUNTRIES table (master) and the LOCATIONS table (detail) to highlight the tables to be exported.

    Marcamos tanto la tabla COUNTRIES (maestra) como la tabla LOCATIONS (detalle) para resaltar las tablas que se van a exportar.

    Para admitir la exportación XML anidada, definimos seis tipos PL/SQL, tres para cada tabla, vinculados entre sí:

    Tabla de detalles (LOCATIONS):

    • LOCATIONS_XML_ITEM: tipo de objeto, los nombres de los atributos coinciden con las columnas de la tabla LOCATIONS

    • LOCATIONS_XML_LIST: un tipo de colección (TABLE OF LOCATIONS_XML_ITEM)

    • LOCATIONS_XML_ELEM: tipo de objeto que envuelve una LOCATIONS_XML_LIST (para que pueda incrustarse)

    Necesitamos esto para permitir que el tipo maestro haga referencia a colecciones de detalles.

    Tabla maestra (COUNTRIES):

    • COUNTRIES_XML_ITEM: objeto cuyos atributos reflejan las columnas de COUNTRIES, más un atributo de tipo LOCATIONS_XML_ELEM para contener datos detallados anidados

    • COUNTRIES_XML_LIST: tipo de colección (TABLE OF COUNTRIES_XML_ITEM)

    • COUNTRIES_XML_ELEM: objeto contenedor que contiene un COUNTRIES_XML_LIST

    Una vez creados los seis, puede inspeccionarlos en la página Tipos PL/SQL de Hora, en la pestaña Todos los tipos (que muestra tanto los tipos de objeto como los de colección en una lista combinada).

    Creating 3 XML types for each table to define the XML export structure.

    Creación de tres tipos XML para cada tabla con el fin de definir la estructura de exportación XML

    Hora resalta los tipos modificados recientemente con un fondo verde. Con el tiempo, el color vuelve al predeterminado. Puede hacer clic en el botón «desvanecer cambios» en la parte superior izquierda (hasta tres veces) para restablecer el fondo.

    Hora displays recently changed objects using a green background that fades as time goes by or when enforced

    Hora muestra los objetos modificados recientemente con un fondo verde que se desvanece con el tiempo o cuando se aplica

    Hora también sigue mostrando automáticamente cualquier advertencia o error de la base de datos.


    Creación/registro del esquema XSD

    En nuestra primera publicación, creamos el paquete XML_LOGIC, que generó y registró el esquema EMPLOYEES.XSD para su importación. Ahora lo ampliamos para que también admita la exportación, a través de un nuevo esquema COUNTRIES.XSD.

    Actualizamos XML_LOGIC para incluir:

    • Un procedimiento unregister_all_xsds para eliminar cualquier esquema existente (incluido EMPLOYEES.XSD).

    • Un procedimiento register_all_xsds para (re)registrar tanto el esquema EMPLOYEES como el nuevo esquema COUNTRIES XSD.

    Ejecute lo siguiente:

    begin
      XML_LOGIC.unregister_all_xsds;
      XML_LOGIC.register_all_xsds;
    end;
    /

    Una vez ejecutado, ambos XSD se registran en la base de datos. En la página XML de Hora verá lo siguiente:

    • La lista de ambos archivos XSD

    Hora displays the created XSD

    Hora muestra el XSD creado

    • En otra pestaña, la asignación de elementos XML a tipos PL/SQL, que ahora muestra la estructura anidada maestro/detalle
    Hora shows the mapping of XML elements to PL/SQL types

    Hora muestra la asignación de elementos XML a tipos PL/SQL

    Tenga en cuenta que el XSD recién registrado ahora admite una jerarquía anidada COUNTRIES → LOCATIONS.


    Tabla de interfaz para la exportación de datos

    Definimos la tabla XML_COUNTRIES_TRANSFER como nuestra interfaz de exportación; los consumidores posteriores leen esta tabla.

    Data structure to store XML exports

    Estructura de datos para almacenar exportaciones XML

    Columnas importantes:

    • ID: clave principal, rellenada por un desencadenador que utiliza una secuencia

    • XML_DATA: columna CLOB que contiene el XML generado

    • Columnas adicionales: metadatos, marcas de tiempo, campos de estado

    También creamos una vista XML_COUNTRIES_TRANS_DATA_V que une COUNTRIES y LOCATIONS, reuniendo los datos en un formulario relacional alineado con nuestra estructura XML deseada:

    Creating a view that displays the hierarchical XML export as a relational structure

    Creación de una vista que muestra la exportación XML jerárquica como una estructura relacional

    Esta vista devuelve datos jerárquicos en un conjunto de resultados relacionales; nuestra lógica de exportación seleccionará de esta vista e insertará esos resultados como XML en la tabla de transferencia.

    Para obtener más información sobre las técnicas de relación a XML, consulte recursos como la conversión XMLTABLE (por ejemplo, a través de oratable): https://www.oratable.com/xmltable-convert-xml-to-relational-form/ .


    Lógica de exportación (PL/SQL)

    Mejoramos el paquete XML_INTERFACE con un nuevo procedimiento para realizar la exportación XML:

    • Selecciona XML de XML_COUNTRIES_TRANS_DATA_V

    • Inserta ese XML (más marcas de tiempo/metadatos) en XML_COUNTRIES_TRANSFER

    PL/SQL package that encapsulates all the XML export logic

    Paquete PL/SQL que encapsula toda la lógica de exportación XML

    Ejemplo de uso:

    declare
      XmlCountriesTransferID XML_COUNTRIES_TRANSFER.ID%TYPE;
    begin
      XmlCountriesTransferID := XML_INTERFACE.CreateCountriesExport;
    end;

    Esto devuelve el ID de la clave principal del registro de exportación recién insertado.

    Una vez insertado, puede inspeccionar la columna XML_DATA en Hora para ver el XML generado.

    Viewing XML export data in Hora's data content browser

    Visualización de datos de exportación XML en el navegador de contenido de datos de Hora

    Los sistemas externos pueden entonces consultar XML_COUNTRIES_TRANSFER para obtener la exportación:

    • El XML_DATA CLOB contiene el XML jerárquico completo

    • Las columnas de metadatos proporcionan información auxiliar, como marcas de tiempo y estado


    Conclusión

    Su interfaz de exportación XML ya está operativa. Puede descargar nuestro ejemplo como plantilla y adaptarlo a sus propios escenarios de exportación maestro/detalle.

    Los equipos que trabajan con arquitecturas similares informan de un notable aumento de la productividad cuando utilizan KeepTool + Oracle XML DB para interfaces basadas en XML.


    ➡️ Pruebe KeepTool gratis

    Las herramientas Oracle de KeepTool están diseñadas específicamente para desarrolladores, administradores de bases de datos (DBA) y equipos de soporte. Con más de 25 años de experiencia, optimizamos continuamente nuestro software para que el análisis y la documentación de sus bases de datos sean más rápidos, eficientes y claros.