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 Horas SQL-Seite führen Sie den folgenden Code aus, um diese PL/SQL-Typen zu erzeugen:

Anlegen von 3 PL/SQL Types um die Importstruktur der Tabelle EMPLOYEE zu definieren

Anlegen von 3 PL/SQL Types um die Importstruktur der Tabelle EMPLOYEE zu definieren

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

Horas PL/SQL Seite zeigt die 3 Types an

Horas PL/SQL Seite zeigt die 3 Types an

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

Hora zeigt das erzeugte XSD an, dass die Struktur für den XML-Import definiert

Hora zeigt das erzeugte XSD an, dass die Struktur für den XML-Import definiert

  • Eine Mapping-Ansicht zwischen XSD-Elementen und PL/SQL-Typen
Hora zeigt die Zuordnung von XML Elements und PL/SQL Types

Hora zeigt die Zuordnung von XML Elements und PL/SQL Types

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

Dieses PL/SQL Package kapselt die gesamte Logik der XSD-Erzeugung sowie das Registrieren des XDSs

Dieses PL/SQL Package kapselt die gesamte Logik der XSD-Erzeugung sowie das Registrieren des XDSs

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:

Diese Tabellenstruktur enthält alle Daten für den XML-Import

Diese Tabellenstruktur enthält alle Daten für den XML-Import

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 bildet die XML-Daten in eine relationale Struktur ab

Diese View bildet die XML-Daten in eine relationale Struktur ab

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

Diese PL/SQL-Procedure kapselt die gesamte Importlogik in ein Package

Diese PL/SQL-Procedure kapselt die gesamte Importlogik in ein Package

….

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:

Anzeige der XML-Daten in Horas Data Content Browser

Anzeige der XML-Daten in Horas Data Content Browser

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

Horas Data Content Browser zeigt die importierten Daten

Horas Data Content Browser zeigt die importierten Daten

Die Zeitstempel der Transfer-Tabelle wurden ebenfalls aktualisiert:

Die Zeitstempel in der Transfertabelle wurden aktualisiert

Die Zeitstempel in der Transfertabelle wurden 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:

Anzeige der XML-Daten in einer relationalen Struktur

Anzeige der XML-Daten in einer relationalen Struktur


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.