Export XML Data with KeepTool & Oracle XML DB

Published 03. March 2023

Updated October 2025


Introduction

Hello again. In our two-part series, we’re showing how to use KeepTool 15 together with Oracle XML DB. In the first article, we covered building a working import interface for HR.EMPLOYEES. Now we’ll focus on the complementary export interface — specifically handling a master/detail relationship between HR.COUNTRIES (master) and HR.LOCATIONS (detail). As before, we keep things focused on essentials, giving you ample flexibility to extend as needed.


Creating PL/SQL types

We intend to export data from both COUNTRIES and LOCATIONS in the HR schema. Since there is a foreign-key relation from LOCATIONS to COUNTRIES, our XML must nest the detail (LOCATIONS) inside the master (COUNTRIES).

On the “Tables” page in Hora, the master/detail tab shows a small diagram of direct relationships. We flagged both COUNTRIES and LOCATIONS to make clear which tables this export example will involve.

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

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

To support nested XML export, we define six PL/SQL types — three for each table, linked to each other:

Detail table (LOCATIONS):

  • LOCATIONS_XML_ITEM: object type, attribute names match columns of the LOCATIONS table

  • LOCATIONS_XML_LIST: a collection type (TABLE OF LOCATIONS_XML_ITEM)

  • LOCATIONS_XML_ELEM: object type that wraps one LOCATIONS_XML_LIST (so it can be embedded)

We need this to let the master type reference detail collections.

Master table (COUNTRIES):

  • COUNTRIES_XML_ITEM: object whose attributes mirror columns in COUNTRIES, plus one attribute of type LOCATIONS_XML_ELEM to hold nested detail data

  • COUNTRIES_XML_LIST: collection type (TABLE OF COUNTRIES_XML_ITEM)

  • COUNTRIES_XML_ELEM: wrapper object containing one COUNTRIES_XML_LIST

Once you’ve created all six, you can inspect them in Hora’s PL/SQL Types page under the All types tab (which shows both object and collection types in one combined list).

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

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

Hora highlights recently changed types with a green background. Over time, the color fades back to the default. You can click the “fade changes” button in the upper-left (up to three times) to reset the background.

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

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

Hora also continues to display any warnings or database errors automatically.


Creating / Registering the XSD Schema

In our first post, we built the XML_LOGIC package, which generated and registered the EMPLOYEES.XSD schema for import. Now we expand it to support export as well, via a new COUNTRIES.XSD schema.

We update XML_LOGIC to include:

  • A procedure unregister_all_xsds to drop any existing schemas (including EMPLOYEES.XSD)

  • A procedure register_all_xsds to (re)register both the EMPLOYEES and the new COUNTRIES XSDs

Run the following:

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

Once executed, both XSDs are registered in the database. In Hora’s XML page you will then see:

  • The list of both XSD files

Hora displays the created XSD

Hora displays the created XSD

  • On another tab, the mapping of XML elements to PL/SQL types, now showing the nested master/detail structure
Hora shows the mapping of XML elements to PL/SQL types

Hora shows the mapping of XML elements to PL/SQL types

Note that the newly registered XSD now supports a nested COUNTRIES → LOCATIONS hierarchy.


Interface Table for Data Export

We define the XML_COUNTRIES_TRANSFER table as our export interface — downstream consumers read from this table.

Data structure to store XML exports

Data structure to store XML exports

Important columns:

  • ID: primary key, populated by a trigger using a sequence

  • XML_DATA: CLOB column containing the generated XML

  • Additional columns: metadata, timestamps, status fields

We also create a view XML_COUNTRIES_TRANS_DATA_V that joins COUNTRIES and LOCATIONS, assembling data into a relational form aligned with our desired XML structure:

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

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

This view returns hierarchical data in a relational result set; our export logic will select from this view and insert those results as XML into the transfer table.

For more on relational-to-XML techniques, see resources like XMLTABLE conversion (e.g. via oratable): https://www.oratable.com/xmltable-convert-xml-to-relational-form/ .


Export Logic (PL/SQL)

We enhance the XML_INTERFACE package with a new procedure to perform the XML export:

  • It selects XML from XML_COUNTRIES_TRANS_DATA_V

  • It inserts that XML (plus timestamps/metadata) into XML_COUNTRIES_TRANSFER

 

PL/SQL package that encapsulates all the XML export logic

PL/SQL package that encapsulates all the XML export logic

Usage example:

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

This returns the primary key ID of the newly inserted export record.

Once inserted, you can inspect the XML_DATA column in Hora to view the generated XML.

Viewing XML export data in Hora's data content browser

Viewing XML export data in Hora’s data content browser

External systems can then query XML_COUNTRIES_TRANSFER to fetch the export:

  • The XML_DATA CLOB holds the complete hierarchical XML

  • Metadata columns provide auxiliary information like timestamps and status


Conclusion

Your XML export interface is now functional. You’re free to download our example as a template and adapt it for your own master/detail export scenarios.

Teams working with similar architectures report noticeable productivity gains when using KeepTool + Oracle XML DB for XML-based interfaces.


➡️ Try KeepTool for free

KeepTool's Oracle tools are designed specifically for developers, DBAs, and support teams.
Based on over 25 years of experience, we continuously optimize our software to make your database analysis and documentation faster, more efficient, and clearer.