Oracle 7.3 bis Oracle 23c 20+ Jahre Erfahrung Version (Freigegeben: )

Oracle XML DB (Teil 2) – Implementierung einer Datenexportschnittstelle

03 Mrz 2023

Einführung

Hiermit begrüßen wir Sie zum zweiten Artikel, in dem wir zeigen, wie KeepTool 15 zusammen mit Oracle XML DB verwendet werden kann.  Dazu wird Oracles XML-Komplettlösung verwendet, die das Speichern und Laden von XML-Dokumenten aus der Datenbank erlaubt. Dazu können XML-Schemas in der Datenbank registriert und Abfragen auf Objekt-relationale Datenstrukturen durchgeführt werden.

Im ersten Blogbeitrag haben wir zunächst die Grundlagen erklärt. Anschließend haben wir Schritt für Schritt eine XML-Schnittstelle für den Datenimport in die Tabelle EMPLOYEES aus Oracles HR (Human Resources) Beispielschema entwickelt.

Im diesem zweiten Beitrag ergänzen wir das Beispiel nun durch eine Exportschnittstelle. Dabei zeigen wir anhand der beiden Tabellen HR.DEPARTMENTS und LOCATIONS, wie eine Master/Detail-Beziehung verarbeitet werden kann.
Wir konzentrieren wir uns hierbei auf das Wesentliche. Dadurch bleibt Spielraum, die Logik weiter zu vervollständigen und an die eigenen Bedürfnisse anzupassen.

Definition von PL/SQL Types

Die Aufgabe besteht darin, Daten in die Tabellen COUNTRIES und LOCATIONS aus dem Oracle Demoschema HR zu importieren. Zwischen den beiden Tabellen besteht eine Master/Detail-Beziehung. Dabei ist COUNTRIES die Mastertabelle und LOCATIONS die Detailtabelle.

Hora zeigt auf der Master/Detail-Lasche der “Tables”-Seite ein kleines Diagramm. Hier werden direkte Master- und Detail-Beziehungen der ausgewählten Tabelle dargestellt.  Wir haben die beiden Tabellen COUNTRIES und LOCATIONS markiert, um die in diesem Artikel betrachteten Tabellen hervorzuheben.

Als ersten Schritt dazu definieren wir wieder einige PL/SQL Types, um anschließend daraus mit Hilfe von Oracle XML-DB eine XSD-Schema-Definition zu erzeugen.
Genauer gesagt, benötigen wir 6 weitere PL/SQL Types. Für jede Tabelle definieren wir 3 voneinander abhängige Typen.

Zuerst erzeugen wir die Typen für die Detailtabelle LOCATIONS. Diese stehen später bei der Definition der Master-Typen zur Verfügung, um einen Detail-Typen referenzieren zu können.

  • LOCATIONS_XML_ITEM
    ist ein Object Type, dessen Elemente der Datenstruktur der Tabelle LOCATIONS entsprechen.
  • LOCATIONS_XML_LIST
    ist ein Collection Type, der mehrere Elemente des Typs LOCATIONS_XML_ITEM aufnimmt.
  • LOCATIONS_XML_ELEM
    ist ein weiterer Object Type, der als einziges Element die LOCATIONS_XML_LIST enthält.
    Wir benötigen das, um den Collection Type in einen Object Type einzubetten.

Die Logik der Typdefinition entspricht der im ersten Artikel für die Tabelle EMPLOYEES beschriebenen Vorgehensweise.

Nun erzeugen wir noch 3 weitere Typen für die Tabelle COUNTRIES:

  • COUNTRIES _XML_ITEM
    ist ein Object Type, dessen Elemente der Datenstruktur der Tabelle COUNTRIES entsprechen.
    Darüber hinaus enthält der Objekttyp ein Member vom Typ LOCATIONS_XML_ELEM welches die Detaildaten repräsentiert.
  • COUNTRIES _XML_LIST
    ist ein Collection Type, der mehrere Elemente des Typs _XML_ITEM aufnimmt.
  • COUNTRIES _XML_ELEM
  • ist ein weiterer Object Type, der als einziges Element die COUNTRIES_XML_LIST enthält.
    Wir benötigen das, um den Collection Type in einen Object Type einzubetten.

Jetzt können wir die Types in Hora auf der PL/SQL Types-Seite sehen.  Da wir den Reiter ‚All Types‘ aktiviert haben, sind die Objekt Types und Collection Types in einer gemeinsamen Liste zu sehen:

Hora stellt vor kurzem geänderte Objekte mit einer grünen Hintergrundfarbe dar. Mit der Zeit verblasst das Grün zur normalen Hintergrundfarbe.
Sie können die markierte Schaltfläche in der linken oberen Ecke benutzen, um das Verblassen des Grüntons schrittweise zu beschleunigen. Nach 3 Klicks erfolgt die Darstellung wieder in normaler Hintergrundfarbe.

Das Beispiel zeigt auch, wie Hora automatisch Warnungen bzw. Fehlermeldungen anzeigt, die von der Datenbank erzeugt werden.

See how it works!

Entdecken Sie die Möglichkeiten von KeepTool.

i,g

Erzeugen des XSD-Schemas

Im vorigen Blockbeitrag haben wir das Package XML_LOGIC vorgestellt. Es implementiert die Logik, um das Schema EMPLOYEES.XSD Schema zu erstellen, das für den Datenimport verwendet wurde.

Im Rahmen dieses Beitrags erweitern wir das Package um zusätzlichen Code, um die Logik für ein zweites Schema COUNTRIES.XSD zu implementieren.

Möglicherweise haben Sie bemerkt, dass der Packagename XML_LOGIC in einem gesättigten Grünton angezeigt wird, da es gerade geändert bzw. angelegt wurde. Der Packagename XML_INTERFACE hat einen geringfügig helleren Hintergrund. Es wurde ebenfalls kürzlich geändert, aber bereits vor ein paar Tagen. Sie können die markierte Schaltfläche in der linken oberen Ecke benutzen, um den Grünton mit jedem Klick einen Schritt weiter verblassen zu lassen. Nach 3 Schritten ist die normale Hintergrundfarbe wieder erreicht. Sie können mit Hilfe der Schaltfläche alle bisherigen Änderungen akzeptieren und ein Stück verblassen lassen. Alle neuen Änderungen werden dann wieder mit dem intensivsten Grün hervorgehoben.

Aber nun kommen wir wieder zurück zur Exportschnittstelle. Das Package XML_LOGIC haben wir so angepasst, dass sowohl die bereits vorhandene Logik für EMPLOYEES als auch die neue Logik für COUNTRIES/LOCATIONS implementiert ist. Für die einfache Nutzung gibt es nun neue Prozeduren für die folgenden beiden Aufgaben:

  • Aufheben der Registrierung aller XSDs einschließlich des EMPLOYEES.XSD, das wir im vorigen Artikel erzeugt haben.
  • Neu-Registrierung aller XSDs, d.h. sowohl von EMPLOYEES.XSD für den Datenimport als auch COUNTRIES.XSD für den Datenexport.

Zum Aufruf führen wir den folgenden anonymen Block aus:

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

Nachdem dieser Code ausgeführt worden ist, sind beide XSDs in der Datenbank registriert. Das können wir uns in Hora auf der XML-Seite anschauen:

Auf der zweiten Tab-Lasche zeigt Hora die Zuordnung der XSD-Elemente zu den PL/SQL Types:

Bitte beachten Sie, dass das XSD jetzt eine Master/Detail-Struktur abbildet.

Schnittstellentabelle für den Datenexport

Die Tabelle XML_COUNTRIES_TRANSFER wird von uns für die Durchführung des Datenexports verwendet.  Die externe Stelle, die die Daten des Systems weiterverarbeiten soll, kann die Daten aus dieser Tabelle lesen (abholen).
Die Struktur der Tabelle sieht wie folgt aus:

Wir entwickeln PL/SQL-Logik, die bei jedem Export einen neuen Datensatz in die Tabelle einfügt. Ein Trigger versorgt die Primärschlüsselspalte ID mit einem neuen Wert aus einer Sequence. Die Spalte XML_DATA enthält die zu importierenden Daten im XML-Format. Die restlichen Spalten beinhalten Metadaten wie Zeitstempel.

Die View XML_COUNTRIES_TRANS_DATA_V selektiert Daten aus den beiden Tabellen COUNTRIES und LOCATIONS und liefert als Ergebnismenge eine hierarchische XML-Struktur:

Die PL/SQL-Logik benutzt die View, um die Spalte XML_DATA der Schnittstellen-Tabelle XML_COUNTRIES_TRANSFER zu füllen.

Hier https://www.oratable.com/xmltable-convert-xml-to-relational-form/ finden Sie weitere Informationen über die Technologie zur Konvertierung von XML-Daten in eine relationale Darstellung. Sie können den Inhalt der View in der DataContent-Ansicht später sehen, nachdem wir einen Datensatz in die Tabelle XML_COUNTRIES_TRANSFER eingefügt haben.

Datenexport-Logik

Nachdem wir die Grundlagen bereitgestellt haben, können wir mit der Implementierung der eigentlichen Exportlogik fortfahren. Dazu erweitern wir die Logik des PL/SQL-Package XML_INTERFACE.

Es bekommt eine neue Prozedur für den XML-Export. Die Implementierung ist vergleichsweise einfach:

  • Abfragen des XMLs über die View XML_COUNTRIES_TRANS_DATA_V
  • Speichern des XMLs inklusive Zeitstempeln in der Tabelle XML_COUNTRIES_TRANSFER.

Der XML-Export kann jetzt durch einen einzelnen PL/SQL-Aufruf gestartet werden:

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

Die Funktion liefert den Primärschlüsselwert in der Schnittstellentabelle neu eingefügten Datensatzes zurück.
Nachdem nun der Datensatz eingefügt wurde, können Sie sich das XML in Hora anschauen:

Der Datenempfänger der Exportschnittstelle kann sich nun die Daten aus der Tabelle XML_COUNTRIES_TRANSFER abholen.

Zusammenfassung

Die XML-basierte Datenexport-Schnittstelle ist nun einsatzbereit. Sie können das Beispiel hier herunterladen und als Vorlage benutzen, um Ihre eigene Datenexport-Schnittstelle zu erstellen.

Weitaus komplexere Schnittstellenimplementierungen aufbauend auf dem vorgestellten Konzept haben sich bereits in der praktischen Projektarbeit bewährt. Die beteiligten Entwickler berichten von einer deutlichen Verbesserung der Produktivität durch den Einsatz unserer Tools.