Importar datos XML con KeepTool y Oracle XML DB

    Publicado 23. enero 2023

    Actualizado en octubre de 2025


    Introducción

    ¡Hola de nuevo! En esta serie de dos partes, mostraremos cómo KeepTool funciona junto con Oracle XML DB para importar y exportar datos XML sin problemas.

    La compatibilidad nativa con XML de Oracle le permite almacenar, validar y consultar documentos XML dentro de la base de datos. Puede registrar esquemas XML, asignar tipos PL/SQL y exponer datos relacionales como XML o incorporar XML en tablas relacionales.

    En este primer artículo, presentamos los fundamentos y creamos una interfaz de importación de datos funcional para la tabla HR.EMPLOYEES. El siguiente artículo tratará sobre la exportación de datos y las jerarquías maestra/detalle, como HR.DEPARTMENTS → HR.LOCATIONS.

    Nos centramos en lo esencial; más adelante podrá ampliar la lógica para adaptarla a sus necesidades específicas.


    Un caso de uso de ejemplo

    Imaginemos una gran empresa con una base de datos central de RR. HH. Las sedes regionales mantienen réplicas locales de los datos de los empleados, que deben actualizarse desde la sede central a través de XML:

    • La sede central exporta los datos nuevos o modificados de los empleados en formato XML (por ejemplo, cada noche o por cada actualización).

    • La sede regional recibe ese XML y lo importa, añadiendo nuevos registros o actualizando los existentes.

    En la parte 1, mostramos cómo importar XML al esquema local de RR. HH. En la parte 2, mostraremos cómo exportar los datos de nuevo a XML, incluyendo el manejo de las relaciones maestro/detalle.


    Creación de tipos PL/SQL para XML

    Trabajaremos con la tabla HR.EMPLOYEES, por lo que el primer paso es definir tipos PL/SQL que reflejen su estructura:

    • EMPLOYEE_XML_ITEM: tipo de objeto cuyos atributos se asignan a columnas en EMPLOYEES

    • EMPLOYEES_XML_LIST: una colección (TABLE) de EMPLOYEE_XML_ITEM

    • EMPLOYEES_XML_ELEM: objeto contenedor que contiene una EMPLOYEES_XML_LIST, necesario para que Oracle XML DB pueda asignarse a una raíz de documento XML

    Ejecute el siguiente código en la interfaz SQL de Hora:

    Creating 3 PL/SQL types to define the XML import structure for the table EMPLOYEE

    Creación de 3 tipos PL/SQL para definir la estructura de importación XML para la tabla EMPLOYEE

    Una vez creados, puede verlos en la página Tipos PL/SQL de Hora (pestaña Todos los tipos):

    Hora's PL/SQL Types page displays the 3 types

    La página Tipos PL/SQL de Hora muestra los 3 tipos

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


    Creación del esquema XSD

    Una vez que tenga sus tipos PL/SQL, puede generar un esquema XML (XSD) y registrarlo en la base de datos:

      SELECT dbms_xmlschema.generateschema(
        'HR', 
        'EMPLOYEES_XML_ELEM', 
        'EMPLOYEES_LIST'
      ) FROM DUAL;

    Utilice ese resultado en un bloque PL/SQL anónimo para registrar el esquema:

      begin 
        dbms_xmlschema.registerschema( 
          'EMPLOYEES.XSD', 
          dbms_xmlschema.generateschema( 
            schemaname => 'HR', 
            typename => 'EMPLOYEES_XML_ELEM', 
            elementname => 'EMPLOYEES_LIST'), 
          gentypes => FALSE, 
          genbean => FALSE, 
          gentables => FALSE); 
      end;

    Después de ejecutar esto, el XSD se registra en Oracle XML DB. En la página XML de Hora verá:

    • La lista XSD

    Hora displays the generated XSD that defines the XML import structure

    Hora muestra el XSD generado que define la estructura de importación XML

    • Una vista de mapeo entre los elementos XML y sus tipos PL/SQL
    Hora shows the mapping between XML elements and PL/SQL types

    Hora muestra la asignación entre elementos XML y tipos PL/SQL

    Envolvemos estos pasos en un paquete PL/SQL llamado XML_LOGIC.

    PL/SQL package that encapsulates all the XSD creation logic as well as registring the XSD

    Paquete PL/SQL que encapsula toda la lógica de creación de XSD, además de registrar el XSD

    Así, más adelante, solo tendrá que llamar a

      XML_LOGIC.register_xsd('EMPLOYEES').

    El paquete también guarda el XSD como un archivo en un directorio Oracle predefinido, que puede entregar a los sistemas ascendentes para que conozcan el formato esperado.


    Tabla de interfaz para la importación de datos

    Para importar documentos XML, definimos una tabla de interfaz denominada XML_EMPLOYEES_TRANSFER. Los sistemas externos insertan sus cargas XML en esta tabla:

    This table structure provides XML data for import

    Esta estructura de tabla proporciona datos XML para la importación

    Columnas más importantes:

    • ID: clave principal, establecida por un disparador que utiliza una secuencia de la base de datos

    • XML_DATA: CLOB que contiene el documento XML completo

    • Columnas de metadatos: marcas de tiempo, estadísticas, registros de errores

    Además de esto, creamos una vista relacional XML_EMPLOYEES_TRANS_DATA_V que proyecta los datos XML en columnas relacionales:

    View that projects XML data into relational columns

    Vista que proyecta los datos XML en columnas relacionales

    Esta vista utiliza la tabla XML de Oracle u otras técnicas de conversión de XML a relacional para dividir el XML en columnas de registros. (Consulte referencias como [Conversión de Oratable XMLTable] para obtener más información sobre la tecnología).

    Una vez insertada una fila en XML_EMPLOYEES_TRANSFER con XML_DATA, puede inspeccionar inmediatamente el resultado relacional a través de esa vista.


    Lógica de importación de datos

    Es hora de implementar la lógica central en un paquete PL/SQL XML_INTERFACE. Contiene un procedimiento (por ejemplo ProcessEmployeesImport) que hace lo siguiente:

    1. Recorre las filas de XML_EMPLOYEES_TRANS_DATA_V para un ID de transferencia dado

    2. Para cada registro:

      • Si EMPLOYEE_ID ya existe:

        • Si el registro está bloqueado, omitir

        • De lo contrario, actualizar el empleado existente

      • De lo contrario, inserte el nuevo empleado

    3. Después de procesar todo, actualizar las estadísticas y registrar cualquier error

    This packaged PL/SQL procedure encapulates all the import logic.

    Este procedimiento PL/SQL empaquetado encapsula toda la lógica de importación.

    ….

    Por lo tanto, la importación XML se realiza en dos pasos:

    • Insertar la carga útil XML en XML_EMPLOYEES_TRANSFER
    • LlamarXML_INTERFACE.ProcessEmployeesImport(transfer_id)


    Mostrar los datos importados

    Una vez completada la importación, puede ver los resultados directamente en Hora:

    Viewing the XML data in Hora's data content browser

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

    Después de ejecutar el procedimiento, la vista de contenido de datos de Hora muestra el registro importado al instante, lo que confirma que los datos XML se han procesado correctamente.

    Hora' data content browser shows imported data

    El navegador de contenido de datos de Hora muestra los datos importados

    Las estadísticas de la tabla de transferencia se han actualizado, resumiendo el resultado de la importación XML de un vistazo.

    Timestamps in the data transfer table have been updated

    Se han actualizado las marcas de tiempo en la tabla de transferencia de datos

    La vista XML_EMPLOYEES_TRANS_DATA_V definida anteriormente presenta los datos XML junto con su información de transferencia relacionada como una única vista relacional fácil de leer.

    Viewing XML data in a relational structure

    Visualización de datos XML en una estructura relacional


    Conclusión

    ¡Su interfaz de importación basada en XML ya está operativa! Puede descargar nuestra muestra y utilizarla como plantilla de partida.

    Muchos proyectos han adoptado este enfoque: los desarrolladores informan de un aumento significativo de la productividad gracias al uso del soporte integrado de KeepTool para bases de datos XML.

    En la próxima entrega, veremos cómo crear una interfaz de exportación de datos complementaria, gestionando las relaciones maestro/detalle y la salida 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.