Fakultät für Informatik & Wirtschaftsinformatik DB & IS II - WS 2016 SQLX Andreas Schmidt Oracle und XML (SQLX) 1/15 Fakultät für Informatik & Wirtschaftsinformatik DB & IS II - WS 2016 SQLX Standard • XML Standard für SQL • Reihe von Funktionen zur Unterstützung der Ausgabe von XML mittels SQLSelect-Statements • Momentan in Oracle 11g implementiert: • XMLElement • XMLAttributes • XMLForest • XMLAgg • XMLConcat • XMLRoot (nicht XE) • Ergebnisse sind Instanzen vom Typ XMLType (siehe nächster Foliensatz) Andreas Schmidt Oracle und XML (SQLX) 2/15 Fakultät für Informatik & Wirtschaftsinformatik DB & IS II - WS 2016 XMLElement • Funktionsweise: • erster Parameter ist Elementname • XML-Aufrufe können geschachtelt werden • Beispiel: select xmlelement("stadt", name) from mondial.city where country='F' • Ausgabe: XMLELEMENT("STADT",NAME) <stadt>Marseille</stadt> <stadt>Metz</stadt> <stadt>Montpellier</stadt> <stadt>Grenoble</stadt> ... 39 Zeilen ausgewählt. Andreas Schmidt Oracle und XML (SQLX) 3/15 Fakultät für Informatik & Wirtschaftsinformatik DB & IS II - WS 2016 XMLElement • Beispiel 2 select xmlelement("stadt", xmlelement("name", name), xmlelement("einwohner", population)) as staedte from mondial.city where country='F' • Ausgabe STAEDTE <stadt> <name>Paris</name> <einwohner>2152423</einwohner> </stadt> <stadt> <name>Strasbourg</name> <einwohner>252338</einwohner> </stadt> 39 Zeilen ausgewählt. Andreas Schmidt Oracle und XML (SQLX) 4/15 Fakultät für Informatik & Wirtschaftsinformatik DB & IS II - WS 2016 XMLAttributes • Anfrage: select xmlelement("stadt", xmlattributes(longitude as "x",latitude as "y"), xmlelement("name", name), xmlelement("einwohner", population)) as staedte from mondial.city where country='F'; • Ausgabe: <stadt x="2,48333" y="48,8167"> <name>Paris</name> <einwohner>2152423</einwohner> </stadt> <stadt x="7,76667" y="48,5833"> <name>Strasbourg</name> <einwohner>252338</einwohner> </stadt> ... 39 Zeilen ausgewählt. Andreas Schmidt Oracle und XML (SQLX) 5/15 Fakultät für Informatik & Wirtschaftsinformatik DB & IS II - WS 2016 XMLForest • Gleichzeitige Umwandlung mehrerer Spalten zu XML-Elementen (anstatt mehrerer XmlElement-Anweisungen) • Beispiel: select xmlelement("COUNTRY", xmlforest(code, name, capital)) from mondial.country; • Ausgabe <COUNTRY> <CODE>AL</CODE> <NAME>Albania</NAME> <CAPITAL>Tirane</CAPITAL> </COUNTRY> <COUNTRY> <CODE>GR</CODE> <NAME>Greece</NAME> <CAPITAL>Athens</CAPITAL> </COUNTRY> ... 195 Zeilen ausgewählt Andreas Schmidt Oracle und XML (SQLX) 6/15 Fakultät für Informatik & Wirtschaftsinformatik DB & IS II - WS 2016 XMLForest • mit alternativem Aliasnamen • Beispiel: select xmlelement("COUNTRY", xmlforest(code as "ID", name as "Land", capital as "Hauptstadt")) from mondial.country; • Ausgabe <COUNTRY> <ID>AL</ID> <Land>Albania</Land> <Hauptstadt>Tirane</Hauptstadt> </COUNTRY> <COUNTRY> <ID>GR</ID> <Land>Greece</Land> <Hauptstadt>Athens</Hauptstadt> </COUNTRY> ... 195 Zeilen ausgewählt Andreas Schmidt Oracle und XML (SQLX) 7/15 Fakultät für Informatik & Wirtschaftsinformatik DB & IS II - WS 2016 XMLAgg • Bei XMLElement wird aus jeder Datenzeile ein XML-Objekt erzeugt • Zusammenfügen der einzelnen XML-Objekte mittels XMLAgg • Beispiel: select xmlagg(xmlelement("COUNTRY", xmlforest(code, name, capital))) from mondial.country; • Ausgabe: <COUNTRY> <CODE>AL</CODE> <NAME>Albania</NAME> <CAPITAL>Tirane</CAPITAL> </COUNTRY> <COUNTRY> <CODE>GR</CODE> <NAME>Greece</NAME> <CAPITAL>Athens</CAPITAL> </COUNTRY> ... 1 Zeile ausgewählt Andreas Schmidt Oracle und XML (SQLX) 8/15 Fakultät für Informatik & Wirtschaftsinformatik DB & IS II - WS 2016 XMLAgg (2) • Sortierung innerhalb des Aggregats: select xmlagg(xmlelement("COUNTRY", xmlforest(code, name, capital)) order by name) from mondial.country; • Ausgabe: <COUNTRY> <CODE>AFG</CODE> <NAME>Afghanistan</NAME> <CAPITAL>Kabul</CAPITAL> </COUNTRY> <COUNTRY> <CODE>AL</CODE> <NAME>Albania</NAME> <CAPITAL>Tirane</CAPITAL> </COUNTRY> <COUNTRY> <CODE>DZ</CODE> <NAME>Algeria</NAME> ... Andreas Schmidt Oracle und XML (SQLX) 9/15 Fakultät für Informatik & Wirtschaftsinformatik DB & IS II - WS 2016 • Beispiel: select xmlelement("COUNTRIES", xmlagg(xmlelement("COUNTRY", xmlforest(code, name, capital)))) from mondial.country; • Ausgabe: <COUNTRIES> <COUNTRY> <CODE>AL</CODE> <NAME>Albania</NAME> <CAPITAL>Tirane</CAPITAL> </COUNTRY> <COUNTRY> <CODE>GR</CODE> <NAME>Greece</NAME> <CAPITAL>Athens</CAPITAL> </COUNTRY> ... </COUNTRIES> 1 Zeile ausgewählt Andreas Schmidt Oracle und XML (SQLX) 10/15 Fakultät für Informatik & Wirtschaftsinformatik DB & IS II - WS 2016 XMLConcat • Zusammenfügen beliebig vieler XML-Elemente • arbeitet zeilenorientiert • Beispiel: select xmlconcat( xmlelement("name", name), xmlelement("hauptstadt", capital)) LAND from mondial.country; • Ausgabe: LAND <name>Albania</name> <hauptstadt>Tirane</hauptstadt> <name>Greece</name> <hauptstadt>Athens</hauptstadt> ... 195 Zeilen ausgewählt. Andreas Schmidt Oracle und XML (SQLX) 11/15 Fakultät für Informatik & Wirtschaftsinformatik DB & IS II - WS 2016 XMLRoot • Fügt den XML-Header zu hinzu (nicht implementiert in Oracle XE!) • Beispiel: select xmlroot(xmlelement("CITY",xmlforest(name, population))) from mondial.city where country=’F’ • Ausgabe: <?xml version="1.0" encoding="UTF-8"?> <CITY> <NAME>Paris</NAME> <POPULATION>2152423</POPULATION> </CITY> <?xml version="1.0" encoding="UTF-8"?> <CITY> <NAME>Strasbourg</NAME> <POPULATION>252338</POPULATION> </CITY> ... 39 Zeilen ausgewählt Andreas Schmidt Oracle und XML (SQLX) 12/15 Fakultät für Informatik & Wirtschaftsinformatik DB & IS II - WS 2016 SQLPlus Settings • Hinweis: Die SQLX Funktionen liefern als Ergebnis Instanzen vom Typ XMLType (siehe nächster Foliensatz) • Settings für XML (SQLPLUS) set feedback on set long 1000 set pagesize 0 (bzw. set pagesize 50000 bei SQLDeveloper) Andreas Schmidt Oracle und XML (SQLX) 13/15 Fakultät IWI DB & IS II - WS 2016 zum Üben ... • generiere folgendes XML Dokument <laender> <land ID="A"> <staedte> <stadt> <name>Vienna</name> <einwohner>1583000</einwohner> </stadt> <stadt> <name>Eisenstadt</name> <einwohner>10102</einwohner> </stadt> <stadt> <name>Klagenfurt</name> <einwohner>87321</einwohner> </stadt> </staedte> </land> <land ID="D"> ... </land> ... </laender> Hinweis: Die Funktion scan0004.format_xml(...) formatiert die XML-Ausgabe (zur bessern Überprüfbarkeit der Ergebnisse) Beispiel: select scan0004.format_xml( xmlelement("stadt", xmlforest(name as "name", population as "einwohner"))) as xml from mondial.city where country in ('DK','A'); ndreas Schmidt Oracle und XML (SQLX) 14/15 Fakultät für Informatik & Wirtschaftsinformatik DB & IS II - WS 2016 Literatur/Quellen: • Towards an industrial strength SQL/XML Infrastructure http://www.oracle.com/technology/tech/xml/xquery/pdf/ ICDE2005_industrial_strength_sqlxml.pdf • How To: Oracle XML DB: http://www.doag.org/pub/docs/konferenz/2004/vortraege/oraclexmldb.pdf • oracle-faq: http://www.orafaq.com/faqxml.htm • XML in der oracle-datenbank - relational and beyond: http://doesen0.informatik.uni-leipzig.de/proceedings/paper/IP6.pdf • Oracle, Java, XML - Integration in Oracle9iM; Rudolf Jansen ; Software & Support Verlag GmbH; 2004; 60 Seiten; ISBN 3-935042-33-7; Preis: 39.90 EUR • Vorlesung (inkl. Skript) Einführung in XML (Prof. Wegner, Uni Kassel) http://www.db.informatik.uni-kassel.de/Lehre/WS0405/XML Andreas Schmidt Oracle und XML (SQLX) 15/15