SQLX - smiffy.de

Werbung
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
Herunterladen