4. Mai 2007

XML-Dokumente erzeugen ... aber wie?

So, nun geht es also darum, XML-Dokumente aus den relationalen Tabellen zu erzeugen. Und dazu muss ich auf jeden Fall was schreiben, denn wenn man mal nach diesem Thema sucht, dann bietet das Internet schon jede Menge Informationen, aber nicht unbedingt immer die besten und effizientesten:
  • Oracle XDK (Oracle XML Developers Kit)
  • PL/SQL: DBMS_XMLQUERY
  • PL/SQL: DBMS_XMLGEN
  • SQL/XML-Kommandos (XMLElement & Co)
  • :
Von diesen vier Optionen ist für aktuelle Oracle-Versionen (9.2, 10.1, 10.2) eigentlich nur die vierte interessant: Die anderen haben so ihre Nachteile:
  • Oracle XDK: Java außerhalb der Datenbank; das XML lässt sich direkt in der Datenbank wesentlich effizienter und eleganter erzeugen - Es wird ein XML-Dokument erzeugt und direkt nach außen gegeben. Generiert man das XML außerhalb der Datenbank, so werden viele, viele Informationen einzeln nach außen gegeben (Netzwerk!) und dann wird erst das XML erzeugt ...
  • PL/SQL (DBMS_XMLQUERY): Dies ist ein recht veraltetes PL/SQL-Paket. Es entstammt noch der Oracle8i-Zeit, als die Datenbank noch nicht richtig mit XML umgehen konnte. Es ist sehr langsam (Java in der Datenbank) und kann nur sehr einfache XML-Strukturen erzeugen. Man sollte es gar nicht mehr verwenden.
  • PL/SQL (DBMS_XMLGEN): Dieses PL/SQL-Paket ist etwas neuer und kann auch komplexere XML-Strukturen erzeugen. Es ist allerdings im Vergleich zu SQL/XML kein Standard und darüber hinaus ebenfalls nicht die performanteste Variante. Würde ich also auch nicht verwenden.
Dann bleiben nur noch die SQL/XML-Kommandos, zu denen man in der Oracle-Dokumentation mehr Informationen findet. SQL/XML ist inzwischen Teil des SQL-Standards (SQL:2003) - das gute daran ist also, dass die Kommandos dann auch auf anderen Datenbanken funktionieren sollten. Ein weiterer Vorteil ist die Performance. Tests haben gezeigt, dass der "Overhead" für das Erzeugen des XML bei den SQL/XML-Funktionen sehr gering ist - ich kann mich an einen Test mit 1G Daten erinnern: Das Erzeugen des XML-Dokumentes dauerte ca. 3% länger als der reine, relationale SELECT. Hier am besten mal selbst ausprobieren ... Und so geht's: Das einfachste denkbare Beispiel ist wie folgt:

select XMLElement("xml-tag", sysdate) from dual

XMLELEMENT("XML-TAG",SYSDATE)
--------------------------------
2007-05-11
Und in diesem Online-Artikel hier findet sich ein ausführliches Beispiel: http://xml-magazin.de/itr/online_artikel/psecom,id,795,nodeid,69.html

Keine Kommentare:

Beliebte Postings