XML-Datenimport mit KeepTool und Oracle XML DB

Veröffentlicht 23. Januar 2023

Aktualisiert Oktober 2025

Einführung

In einer neuen zweiteiligen Blogserie zeigen wir Ihnen, wie Sie KeepTool in Verbindung mit Oracle XML DB nutzen können. Wie Sie sich vielleicht erinnern, ermöglicht Oracles Standard-XML-Lösung das Speichern und Abrufen von XML-Dokumenten direkt in der Datenbank. Sie können XML-Schemata registrieren und Abfragen über objekt-relational strukturierte Daten ausführen. Dieser erste Blogeintrag führt Sie in die Grundlagen ein und gipfelt in einer funktionierenden Datenimport-Schnittstelle für die Tabelle HR.EMPLOYEES.

Im nächsten Blog zeigen wir, wie Sie eine Datenexport-Schnittstelle erstellen. Sie lernen, wie man technisch mit Master/Detail-Beziehungen (z. B. HR.DEPARTMENTS und HR.LOCATIONS) umgeht.
Insgesamt konzentrieren wir uns strikt auf die wesentlichen Schritte — Sie haben später noch viel Raum, die Logik an Ihre eigenen Anforderungen anzupassen.

Ein typischer Anwendungsfall

Stellen Sie sich eine regionale Niederlassung eines großen Unternehmens vor. Lokal wird eine eigene Kopie der HR-Datenbank geführt. Die Mitarbeiterdaten werden zentral in der Zentrale verwaltet. Die regionale Stelle erhält Updates zu neuen oder geänderten Mitarbeiterdaten per XML-Schnittstelle:

  • Die Hauptdatenbank sendet periodisch (z. B. nachts oder bei jeder Änderung eines Datensatzes) neue oder modifizierte EMPLOYEES-Daten als XML.
    Diese XML-Struktur kann über Web-Services, Remote-Datenbankzugriffe oder andere Mechanismen übertragen werden.

  • Die lokale Seite empfängt die XML-Datenstruktur und importiert sie in die eigene Datenbank.
    Neue Datensätze werden eingefügt, bestehende Datensätze aktualisiert.

In Teil 1 unserer Serie zeigen wir, wie eine XML-Struktur importiert werden kann. Die EMPLOYEES-Daten der lokalen HR-Datenbank werden entweder eingefügt oder aktualisiert. Der zweite Blogbeitrag erläutert anschließend, wie der Datenexport technisch umgesetzt wird.

Definition von PL/SQL-Types

Wir orientieren uns an der HR.EMPLOYEES-Tabelle und definieren zuerst PL/SQL-Typen, die Oracle XML DB die Erstellung eines XSD-Schemas ermöglichen:

  • EMPLOYEE_XML_ITEM: ein Objekttyp, dessen Attribute den Spalten der Tabelle entsprechen

  • EMPLOYEES_XML_LIST: ein Collection-Typ, der eine Liste von EMPLOYEE_XML_ITEM darstellt

  • EMPLOYEES_XML_ELEM: ein Objekttyp, der eine Instanz von EMPLOYEES_XML_LIST enthält
    (Wir benötigen diese Verschachtelung, um die Collection in ein Wurzel-Element zu kapseln.)

Auf Hora’s SQL-Seite führen Sie den folgenden Code aus, um diese PL/SQL-Typen zu erzeugen:

CREATE OR REPLACE TYPE EMPLOYEE_XML_ITEM AS OBJECT ( EMPLOYEE_ID NUMBER (6,0), FIRST_NAME VARCHAR2 (20), LAST_NAME VARCHAR2 (25), EMAIL VARCHAR2 (25), PHONE_NUMBER VARCHAR2 (20), HIRE_DATE DATE, JOB_ID VARCHAR2 (10), SALARY NUMBER (8,2), COMMISSION_PCT NUMBER (2,2), MANAGER_ID NUMBER (6,0), DEPARTMENT_ID NUMBER (4,0) ) / CREATE OR REPLACE TYPE EMPLOYEES_XML_LIST AS TABLE OF EMPLOYEE_XML_ITEM / CREATE OR REPLACE TYPE EMPLOYEES_XML_ELEM AS OBJECT ( EMPLOYEE EMPLOYEES_XML_LIST ) /

Anschließend finden Sie die Typen in Hora unter PL/SQL Types („All types“ Tab). Dort werden Objekttypen und Collection-Typen gemeinsam aufgelistet:

Hora zeigt automatisch Warnungen und Fehlermeldungen des Datenbankservers an.

Erzeugen des XSD-Schemas

Nun verwenden wir dbms_xmlschema.generateschema, um eine XML-Schemabeschreibung zu erzeugen:

select dbms_xmlschema.generateschema( 'HR', 'EMPLOYEES_XML_ELEM', 'EMPLOYEES_LIST') from dual;

Das Ergebnis ist ein CLOB mit dem XSD, den wir anschließend mit dbms_xmlschema.registerschema registrieren:

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;

Nachdem Sie diesen anonymen Block ausgeführt haben, ist das XSD in der Datenbank registriert. In Hora sehen Sie dann auf der XML-Seite:

  • Die Auflistung des XSDs

  • Eine Mapping-Ansicht zwischen XSD-Elementen und PL/SQL-Typen

Zur Vereinfachung haben wir die beschriebenen PL/SQL-Logiken in einem Paket XML_LOGIC gebündelt:

Mit diesem Package reicht später ein einfacher Aufruf:

begin
  XML_LOGIC.register_xsd( 'EMPLOYEES');
end;

Zusätzlich zur Registrierung in der Datenbank wird die XSD als Datei in einem vordefinierten Oracle-Verzeichnis gespeichert — ideal, um sie an Entwicklerteams weiterzugeben, die XML-Daten importieren wollen.

Schnittstellentabelle für den Datenimport

Zur Verwaltung des XML-Importprozesses definieren wir eine Schnittstellentabelle namens XML_EMPLOYEES_TRANSFER. Externe Systeme fügen ihre XML-Payloads in diese Tabelle ein:

Wichtige Spalten:

  • ID: Primärschlüssel, gesetzt durch einen Trigger, basierend auf einer Sequenz

  • XML_DATA: CLOB mit dem XML-Dokument

  • Metadata-Spalten: Zeitstempel, Statistikwerte, Fehlerprotokoll

Auf dieser Basis wird eine relationale Sicht erstellt: XML_EMPLOYEES_TRANS_DATA_V, die XML-Daten und Metadaten gemeinsam darstellt:

Diese View verwendet Oracle-Techniken (z. B. XMLTable), um XML-Inhalte in tabellarische Spalten zu zerlegen. Weitere Informationen zur Technik finden Sie z. B. hier:  https://www.oratable.com/xmltable-convert-xml-to-relational-form/ .

Logik für den Datenimport

Nun erstellen wir das Paket XML_INTERFACE, das eine Prozedur für den XML-Import enthält. Die Implementierung umfasst folgende Schritte:

  1. Iteration über Datensätze in XML_EMPLOYEES_TRANS_DATA_V für eine gegebene Import-ID

  2. Für jeden Datensatz:

    • Wenn EMPLOYEE_ID bereits existiert:

      • Wenn der Datensatz gesperrt ist, überspringen

      • Andernfalls: Update

    • Falls nicht vorhanden: Insert

  3. Nach der Verarbeitung: Statistik aktualisieren und Fehlerprotokoll führen

….

Der Import erfolgt in zwei Schritten:

  • Einfügen des XML-Dokuments in XML_EMPLOYEES_TRANSFER

  • Aufruf von XML_INTERFACE.ProcessEmployeesImport(transfer_id)

Darstellung importierter Daten

Nach dem Import können Sie die Ergebnisse direkt in Hora einsehen:

Nach Ausführung der Prozedur zeigt die Datenansicht in Hora den eingefügten Datensatz an:

Die Statistiken der Transfer-Tabelle wurden ebenfalls aktualisiert:

Die View XML_EMPLOYEES_TRANS_DATA_V ermöglicht es, XML-Inhalt zusammen mit den Spalten der XML_EMPLOYEES_TRANSFER Tabelle in relationaler Form anzuzeigen:

Fazit

Ihre XML-basierte Import-Schnittstelle funktioniert nun! Sie können unser Beispiel als Vorlage herunterladen und für eigene Projekte anpassen.
Bereits in zahlreichen Projekten wurde dieser Ansatz erfolgreich eingesetzt — Entwickler berichten von deutlich gesteigerter Produktivität durch die Verwendung unserer Tools.

Im nächsten Blogbeitrag bauen wir die Export-Schnittstelle, inklusive Master/Detail-Beziehungen, auf.

➡️ KeepTool kostenlos testen

Die Oracle-Tools von KeepTool wurden speziell für Entwickler, DBAs und Support-Teams entwickelt.
Basierend auf über 25 Jahren Erfahrung optimieren wir unsere Software kontinuierlich, um Ihre Datenbankanalyse und -dokumentation schneller, effizienter und übersichtlicher zu gestalten.