Title: XML-Unterst
1XML-Unterstützung in Oracle
2Überblick
- XML Architekturformen und Speicherungsarten
- XML Schema und Mapping
- Laden von Daten
- Zugriff
3Allgemeine XML Architekturen
4Unterschiedliche Speicherarten in Oracle
- Die Speicherart richtetsich nach den
- Anforderungen der
- Anwendung
- Konkurrierender Zugriff
- Vokabularänderung
- Ladeperformance
- Abfrage-Performance
- Redundanzen
- XML Schema Support
Clob
Nativ als Dokument
Relational
Nativ Objektrelational
5Geschichte
Oracle8i
Oracle9i
Oracle10g
Release1
Release2
Entwicklung der XML- Features von Oracle
- Objektrelational
- XML Schema
- Zugriffe mit WebDAV, DOM
- Objektrelational
- XML Schema
- Zugriffe mit WebDAV, DOM
- XML Datentyp
- dokumentbasiert
- XPath Zugriffe
- Indizes
- XML Datentyp
- dokumentbasiert
- XPath Zugriffe
- Indizes
- XML Datentyp
- dokumentbasiert
- XPath Zugriffe
- Indizes
- XML Werkzeuge
- relational / CLOB
- XSQL Servlet
- XML SQL Utility
- XML Werkzeuge
- relational / CLOB
- XSQL Servlet
- XML SQL Utility
- XML Werkzeuge
- relational / CLOB
- XSQL Servlet
- XML SQL Utility
- XML Werkzeuge
- relational / CLOB
- XSQL Servlet
- XML SQL Utility
6Oracle und XML Schema
generiert
Schema
in der Datenbank
Typen
Tabellen
Java Beans
Security
SQL Data
7Beispiel eines XML Schemas
8Terminologie "annotated" XML Schema
- XML Schema mit "Zusatzinformationen"
- Herstellerspezifische Tags und Attribute zur
Steuerung der Persistenz - Namespace-Konzept
- Bei der Schema-Prüfung ignoriert der Parser gemäß
W3C alle Namespaces, die er nicht kennt" - Datenbankunabhängige Parser beachten nur das
allgemeine XML Schema - Bei Registrieren in der Datenbank wird nur das
allgemeine XML Schema und die eigenen
"Annotations " berücksichtigt.
9XML Schema (Beispiel) letter.xsd
ltxsdschema xmlnsxsd"http//www.w3.org/2001/XMLS
chema" xmlnsxdb"http//xmlns.oracle.com/xdb"
elementFormDefault"qualified" attributeFormDefaul
t"unqualified"gt ltxsdelement name"letterBody"
xdbSQLType"LETTER_T" xdbdefaultTable"XDB_
LETTER"gt ltxsdcomplexType mixed"true"gt
ltxsdsequencegt ltxsdelement
name"salutation" xdbSQLType"VARCHAR2"gt
ltxsdcomplexType mixed"true"gt
ltxsdsequencegt
ltxsdelement name"titel"/gt
ltxsdelement name"name"/gt
lt/xsdsequencegt lt/xsdcomplexTypegt
lt/xsdelementgt ltxsdelement
name"quantity" type"xsdpositiveInteger"
xdbSQLType"NUMBER"/gt ltxsdelement
name"productName" xdbSQLType"VARCHAR2"/gt
ltxsdelement name"shipDate" type"xsddate"
minOccurs"0" xdbSQLType"DATE"/gt ...
10Mapping
wird abgebildet auf
CREATE OR REPLACE TYPE salutation_t AS OBJECT
(SYS_XDBPDXDB.XDBRAW_LIST_T, "titel"
VARCHAR2(4000), "name" VARCHAR2(4000), ) NOT
FINAL INSTANTIABLE CREATE OR REPLACE TYPE
letter_t AS OBJECT (SYS_XDBPDXDB.XDBRAW_LIST_T,
"salutation" SALUATION_T, "quantity"
NUMBER(38), "productName" VARCHAR2(4000), "shipDat
e" DATE) NOT FINAL INSTANTIABLE CREATE TABLE
xdb_letter OF XMLTYPE XMLSCHEMA
"http//xmluser.de.oracle.com/xsd/letter.xsd" ID
'A0DD2CF291D90A8EE0340003BA08CF66' ELEMENT
"letterBody" ID 2507 TYPE letter_t ...
11Schema-Registrierung
EXECUTE dbms_xmlschema.registerschema
( 'http//www.personal.xyz/Personal.xsd,--
schemaURL IN varchar2 getFileContent(bfilename('X
ML_DIR',Personal.xsd')), TRUE, --local IN
BOOLEAN TRUE, --genTypes IN BOOLEAN
TRUE FALSE, --genbean IN BOOLEAN FALSE TRUE,
--genTables IN BOOLEAN TRUE FALSE, --force IN
BOOLEAN FALSE 'XMLUSER' --owner IN
VARCHAR2 '')
- Parameter
- Schema-Name bzw. Schema-URL
- Schema-Quelle als Instanz von XMLType, CLOB,
VARCHAR2 oder URI - Flags zur Steuerung der Generierung von
DB-Objekten (Tabellen, Types)
12Der Datentyp XMLType
CREATE TABLE letter OF XMLTYPE -- STORE AS CLOB
erzwingt Speicherung als CLOB
- Ablage als XML Schemabasierenden Tabelle
CREATE TABLE emp_tab2 OF XMLTYPE XMLSCHEMA
"http//xmluser.de.oracle.com/xsd/deptemp.xsd"
ELEMENT "emptable"
- Ablage als XML Schemabasierende Spalte
CREATE TABLE dept_tab2 (deptno NUMBER, employee
XMLTYPE) XMLTYPE employee STORE AS OBJECT
RELATIONAL XMLSCHEMA "http//xmluser.de.oracle.co
m/xsd/deptemp.xsd" ELEMENT "emptable"
13Weitere Schemamanipulationen
ECECUTE dbms_xmlschema.deleteSchema( 'http//www.p
ersonal.xyz/Personal.xsd', dbms_xmlschema.DELETE_C
ASCADE)
CREATE TABLE Personalakten OF XMLTYPE XMLSCHEMA
"http//www.personal.xyz/Personal.xsd" ELEMENT
"Personalakte"
- Validierung
- strukturelle Validierung beim Speichern / Ändern
von XML-Dok. - vollständige Validierung mit Methoden
XMLIsValid()oder SchemaValidate() - Validierungs-Methoden explizit aufrufen, können
über Trigger angebunden werden
14Laden von XML-Daten in die Datenbank
- Mit SQL, PL/SQL und Java
- INSERT INTO .. VALUES
- als CLOB
- Oracle Text
- zusätzliche Indexierung erforderlich
- Mit Hilfe von Protokollen
- FTP
- WEBDAV
- HTTP
15Arbeit mit CLOBs (PL/SQL)
Speicherung von XML Files mittels DBMS_LOB Package
declare theClob CLOB theBFile BFILE begin
insert into xmldocs(filename,document) values
(Sample.xml, empty_clob()) returning document
into theClob theBFileBFileName(XMLFILES,Sam
ple.xml) dbms_lob.fileOpen (theBFile)
dbms_lob.loadFromFile (dest_lobgttheClob, srcgtt
heBFile, amountgtdbms_lob.getLength(theBFile))
dbms_lob.fileClose(theBFile) commit end
BFILE mit Source File assoziiert, Logical
Directory Object XMLFILES vorher in Datenbank
anlegen, z.B. gtCREATE DIRECTORY xmlfiles as
c\work
16Indizieren XML mit interMedia Text
- Voraussetzung für tag-basierte Queries Index auf
den Anfragespalten - in SQL CREATE INDEX
- erweitern um Klausel INDEXTYPE IS ctxsys.context
- erlaubt CONTAINS in WHERE-Klausel
- Sectioner Sammlung von XML-Tags, die indiziert
werden sollen - repräsentiert durch section group im CREATE
INDEX-Befehl / PARAMETERS Klausel - erlauben inhaltsbasiertes Retrieval, beschränkt
auf spezifische XML-Tags - vordefinierte (für jedes Tag) vs.
benutzerdefinierte Sectioner
17Beispiel Arbeit mit interMedia Text (1)
Speicherung von XML-Dokumenten einer
Versicherungsgesellschaft
CREATE TABLE ins_claim (id NUMBER(7) PRIMARY
KEY, when DATE, doc CLOB)
Spalte doc ist indiziert mit auto_section_group
CREATE INDEX doc_ix ON ins_claim(doc) INDEXTYPE
IS ctxsys.context PARAMETERS (section group
ctxsys.auto_section_group)
18Beispiel Arbeit mit interMedia Text (2)
Beispiel-Dokument in der Spalte doc
The insureds ltVEHICLEgtcarlt/VEHICLEgtbroke through
the guard rail and plummeted into a ravine. The
cause was determined to be ltCAUSEgtfaulty
brakedlt/CAUSEgt Amazingly there were no casualties.
XML Section ltcausegt kann abgefragt werden
SELECT id, when FROM ins_claim WHERE contains
(doc,brakes WITHIN cause) gt 0 ID WHEN
DOC ------- ------ ------- 1
12-OCT-00 The insureds ltVEHICLEgtcar...
19Beispiel Arbeit mit interMedia Text (3)
Alternative zu vordefiniertem Auto-Sectioner Defi
nition eines eigenen Sectioners und Verwendung im
Index
section name
tag name
ctx_ddl.create_section_group(my_section,
XML_SECTION_GROUP) ctx_ddl.add_zone_section(
my_section,cause,Cause) ... ctx_ddl.add_attr
_section(my_section,make,Make_at_Vehicle) ...
CREATE INDEX my_doc_ix ON ins_claim(doc) INDEXTYPE
IS ctxsys.context PARAMETERS(section group
my_section)
Mögliche Abfrage ist Suche nach Attributwerten
... where contains (doc, Audi within
Make_at_Vehicle) Findet ltVehicle MakeAudigt
20Laden von Daten über INSERT
mittels XMLType-Konstruktor
SQLgt INSERT INTO Personalakten VALUES 2
(XMLTYPE(' 3 lt? xmlversion"1.0"?gt 4
ltPersonalakte Personalnummer"2234"gt 5
ltPersonaliengt 6 ltNachnamegtMeierlt/Nachname
gt 7 ltVornamegtOttogtlt/Vornamegt
8 ltGeburtsdatumgt1.1.1970lt/Geburtsdatumgt
9 lt/Personaliengt 10 ltGehaltsdaten
Steuerklasse"1" 11 Kirchensteuer"RK"
Kinder"0" /gt 12 ltZeugnisse/gt
13 lt/Personalaktegt 14 ')) 1 row created.
21Laden über Internet Protokolle
22Repository Support für Internet Protokolle
- Zugriffe über Internet Protokolle
- 1. Zugriff über URL
- 2. Bildet Pfadname im Repository ab
- 3. Zeigt Inhalt der Resource
- Support für FTP, HTTP und Web DAV Protokolle
23Sichtweise auf das Repository
xdbresource
resource_view
FTP
HTTP
XML Table
B Tree Index
Text Index
Hierarchical Index
24XML Zugriff mit SQL
- Schnittstellen
- JDBC
- ODBC
- native OCI
- XQuery
- SQL/XML
- Nutzung von Datenbankfeatures
- relationale Tabellen
- objektrelationaler Zugriff
- gespeicherte Prozeduren und Funktionen
- Kombination mit AQ (Advanced Queues)
25Funktionen auf XMLType
- Zugriff auf den Inhalt eines Objekts von XMLType
über Funktionen - extract um das Ergebnis eines XPath-Ausdrucks zu
erhalten, - getClobVal, getStringVal und getNumVal, um das
Ergebnis von extract in einen SQL-Datentyp zu
überführen, - extractValue, um das Ergebnis eines
XPath-Ausdrucks direkt in einen SQL-Wert
umzuwandeln, - existsNode, um zu prüfen, ob ein XPath-Ausdruck
ein Ergebnis liefert. - createXML erzeugt aus einer SQL-Zeichenkette
einen Wert des Typs XML (bei inhaltsorientierter
Zerlegung wieder auf SQL-Tabellen abgebildet)
26Funktionen auf XMLType - Beispiele
- Anzahl der Kinder des Angestellten Meier als
numerischer Wert
SELECT P.Personalakte.extract((//_at_Kinder).getNum
Val() AS Kinderzahl FROM Personalakten P WHERE
P.Personalakte.extract(//Personalien/Nachname/tex
t()). getstringVal() Meier
- gleiche Anfrage unter Verwendung eines
XPath-Ausdrucks in WHERE-Klausel
SELECT P.Personalakte.extract((//_at_Kinder).getNum
Val() AS Kinderzahl FROM Personalakten P WHERE
P.Personalakte.existsNode(//PersonalienNachname
"Meier")
27Funktionen auf XMLType Beispiele (2)
- extract liefert Markup mit
- extractValue() entspricht extract.text()
- Erweiterung von XPath durch Oracle durch weitere
Funktionen, z.B. oracontains - vergleichbar mit CONTAINS-Operator in SQL
- aber kein Textindex erforderlich
SELECT P.Personalakte.extractValue('//Nachname')
AS Nachname FROM Personalakten P WHERE
P.Personalakte.existsNode( //Zeugnisoracontain
s(Zwischenzeugnis,"vollen" OR "vollsten")gt0)
28Änderungen von XML-Dokumenten
Variante 1 ganzes Dokument angeben, um
XMLType-Spalte zu ersetzen
UPDATE Personalakten p SET p.Personalakte
createXML (' lt?xml version"1.0"?gt
ltPersonalakte Personalnummer"2234"gt
ltPersonaliengt ltNachnamegtMeiergt/Nachnamegt
ltVornamegtOttogtlt/Vornamegt ltGeburtsdatumgt197
0-01-01lt/Geburtsdatumgt lt/Personaliengt
ltGehaltsdaten Steuerklasse"1"
Kirchensteuer"RK" Kinder"0" /gt ltZeugnisse/gt
lt/Personalaktegt ') WHERE p.Personalakte.extract
Value('/Personalakte/_at_Personalnummer' )
2234
29Änderungen von XML-Dokumenten
Variante 2 Update nur für die zu ändernden Teile
beschreiben
UPDATE Personalakten p SET p.Personalakte
UpdateXML (p.Personalakte, /Personalakte/Perso
nalien/Nachname/text(), Schulz, /Personalakte
/Gehaltsdaten/_at_Steuerklasse, 3) WHERE
p.Personalakte.extractValue(/Personalakte/_at_Person
alnummer) 2234
- Beispiel beschreibt Änderungen während einer
Heirat - Funktion UpdateXML kann mehrere XPath-Ausdrücke
verarbeiten - neuer Wert kann selbst auch vom Typ XMLType sein
30SQL/XML in Oracle
- Oracle unterstützt SQL/XML-Funktionen aus dem
Standard - XMLELEMENT
- ohne Keyword NAME
- auch Werte von SQL-Objekttypen erlaubt (row
types) - XMLCONCAT
- XMLAGG
- Gegenüber Standard erweiterte Funktionen
- XMLSEQUENCE
- liefert ein VARRAY von XMLType-Instanzen (daraus
lässt sich mittels TABLE-Funktion Tabelle
konstruieren) - liefert dabei alle Elemente auf der höchsten
Ebene zurück - macht Konkatenation rückgängig, die durch
Funktion extract verursacht wird. - XMLCOLLATTVAL
- erzeugt für jede Spalte ein Element des festen
Namens column
31SQL/XML in Oracle (Beispiel)
ltPersonalakte Personalnummer"2234"gt
ltPersonaliengt ltNachnamegtMüllergt/Nachnamegt
ltVornamegtOttogtlt/Vornamegt ltGeburtsdatumgt1960-01
-01lt/Geburtsdatumgt lt/Personaliengt
ltGehaltsdaten Steuerklasse"3" Kirchensteuer
"RK" Kinder"3"gt ltGehalt Start"1997-01-01"
gt7500lt/Gehaltgt ltGehalt Start"1999-01-01"
gt8000lt/Gehaltgt ltGehalt Start"2001-01-01"
gt8500lt/Gehaltgt lt/Gehaltsdatengt lt/Personalaktegt
Ermittle alle Gehaltselemente, die einen Wert von
mindestens 8000 beinhalten
SELECT value(g).getClobVal FROM PersonalaktenX
p, TABLE(XMLSequence(extract(value(p),//Gehalt
))) g WHERE extractValue(value(g), /Gehalt)
gt 8000
32XQuery-Unterstützung in Oracle
- drei Funktionen, die XQuery unterstützen
- XMLQuery
- XMLTable
- XQuery (seit 10R2)
- einige Bestandteile des XQuery-Standards in
früheren Oracle-Versionen nicht verfügbar - Funktion oraview
- zur Anbindung von Tabellen an XQuery
- erzeugt eine XML-Struktur von Tabellen (SQL/XML
konform) - Beispiel
xquery for i in oraview("Auftrag") return
ltAuftraggebergti/Firmalt/Auftraggebergt
Weitere Details im XQuery-Tutorial im Internet
http//xquery-tutorial.de.vu
33Das XML SQL Utility (XSU)
- Prinzip
- Generierung von XML-Dokumenten aus SQL-Abfragen
(in String-Darstellung oder DOM) - Speichern von XML-Dokumenten durch Einfügen von
Daten aus Dokumenten (generated XML) - Aktualisieren und Löschen von Daten aus
XML-Dokumenten in der Datenbank - Schnittstellen
- XSU Java API
- XSU PL/SQL API (Packages DBMS_XMLQuery und
DBMS_XMLSave) - Kommandozeilen-Interface
- Verwendung der XSU- Funktionen durch Aufruf der
Java-Klasse OracleXML - Aufruf in Kommandozeile
- java OracleXML putXML getXML optionen
34XSU-Umgebung
Applikation
XSU
Oracle-Datenbank
XML-Dokument
XML Parser
JDBC Driver
- XSU kann installiert werden
- auf Client-Seite (nur für Java)
- in der Datenbank (erfordert Jserver)
- in der Middle Tier (Web oder Application Server
u.a. Oracle Tools
35Aufruf von XSU getXML
C\work\Oracle\XSU12\libgtjava OracleXML getXML
-user xuser/xuser select from dept
lt?xml version1.0?gt ltROWSETgt ltROW num1gt
ltDEPTNOgt10lt/DEPTNOgt ltDNAMEgtACCOUNTINGlt/DNAMEgt
ltLOCgtNEW YORKlt/LOCgt lt/ROWgt ltROW num2gt
ltDEPTNOgt20lt/DEPTNOgt ltDNAMEgtRESEARCHlt/DNAMEgt
ltLOCgtDALLASlt/LOCgt lt/ROWgt ... lt/ROWSETgt
36Aufruf von XSU putXML
C\work\Oracle\XSU12\libgtjava OracleXML putXML
-user xuser/xuser fileName sampdoc.xml
xmltab Successfully inserted 3 rows into xmltab
- Anmerkungen
- Insert-Operationen erfordern kanonisches
XML-Format - Format muß der Ausgabe der XSU entsprechen
(einschließlich ltrowsetgt und ltrowgt Tags) - Kommandozeilen-Interface erlaubt keine Update-
und Delete-Operationen, d.h. nur über API möglich
37SELECT (XSU Java API)
import java.sql. import oracle.xml.sql.query.
import oracle.jdbc. public class sampGetXML
public static void main(String args) throws
SQLException DriverManager.registerDriver(ne
w oracle.jdbc.driver.OracleDriver())
Connection conn DriverManager.getConn
ection("jdbcoracleoci8scott/tiger _at_")
OracleXMLQuery qry new OracleXMLQuery(conn,"sele
ct from emp") String xmlString
qry.getXMLString() System.out.println("
OUTPUT IS\n"xmlString) qry.close()
conn.close()
38SELECT (XSU Java API), Forts.
- zur Generierung von XML wird die Java-Klasse
OracleXMLQuery verwendet - Erzeugung einer Instanz von OracleXMLQuery mit
Übergabe des SQL-Statements und der Verbindung
als Parameter - Beispiel
OracleXMLQuery qry new OracleXMLQuery(conn,
"SELECT FROM emp")
- Generierung der DOM-Darstellung anstelle
String-Darstellung
XML Document domDOC (XMLDocument)qry.getXMLDOM()
39INSERT (XSU Java API)
Beispiel für INSERT mit Werten in allen Spalten
public class sampInsert public static void
main(String args) throws SQLException
String tabName "emp" String fileName
"sampdocins.xml" DriverManager.registerDriv
er(new oracle.jdbc.driver.OracleDriver())
Connection conn
DriverManager.getConnection("jdbcoracleoci8scot
t/tiger_at_") OracleXMLSave sav new
OracleXMLSave(conn, tabName) URL url
sav.getURL(fileName) int rowCount
sav.insertXML(url) System.out.println("
successfully inserted "rowCount" rows
into "tabName) conn.close()
40Bestandteile des XDK
Java
C
C
PL/SQL
XML Parser
XSLT Processor
Schema Processor
Class Generator
XML Trans- viewer Beans
XSQL Servlet
XSU
XSU
41XSQL
- XML SQL
- Bestandteil des Oracle XDK (XML Development Kit)
- XML-formatierte Ausgabe von relational
gespeicherten Daten in jedem DBMS verfügbar - Grundidee
- relational gespeicherte Daten als XML darstellen
- Einbettung von SQL-Anweisungen in XML
- Weiterverarbeitung mittels XSL-Stylesheets
möglich
42Vorteile von XSQL Pages
- einfache Generierung von XML-Dokumenten auf der
Basis von SQL Queries - erlaubt Insert-, Update- und Delete-Operationen
- unterstützt XSL Transformation durch Anwendung
von XML Stylesheets, beliebige Zielformate wie
z.B. HTML - dient als Input für den XSQL Page Processor
- Trennung der Daten von der Darstellung
43XSQL Page Verarbeitung
- Bestandteile
- XSQL Pages
- SQL Queries
- DML und DDL in XML Tags
- XSQL Page Processor (in Java)
- nimmt XSQL Pages als Input
- erzeugt dynamische XML Seiten mit den Ergebnissen
der SQL-Queries - XSQL Servlet
- erlaubt XSQL Page Verarbeitung im Web
- Erweiterbare Stylesheets
- optional
- XSL Transformationen zur Formatierung des Output
44XSQL Page Processor Architektur
XSL Stylesheet
XSQLConfig
XSQL Page
Datenbank
XML o.a. Formate
45Verarbeitung von XSQL Pages
Einführendes Beispiel
XSQL Page Input
lt?xml version1.0 ?gt ltxsqlquery
connectiondemo xmlnsxsqlurnoracle-xsqlgt
SELECT Hello World AS greeting FROM
DUAL lt/xsqlquerygt
XML Output
ltROWSETgt ltROW num1gt ltGREETINGgtHello
Worldlt/GREETINGgt lt/ROWgt lt/ROWSETgt
46XSQL Queries und Connections
- XSQL Page erlaubt die Definition von SQL Queries
- Query ist eingebettet in ein xsqlquery Tag
- Connection-Attribut definiert die
Verbindungsinformaiton zur Datenbank - Connection Name wird aufgelöst in einer
Konfigurationsdatei XSQLConfig.xml (in xsql/lib) - Beispiel
ltconnectiondefsgt ltconnection namedemogt ltusern
amegtxuserlt/usernamegt ltpasswordgtxuserlt/passwordgt
ltdburlgtjdbcoraclethin_at_localhost1521mydblt/dbur
lgt ltdrivergtoracle.jdbc.driver.OracleDriverlt/drive
rgt lt/connectiongt ... lt/connectiondefsgt
47XSQL Tags (Auswahl)
- ltxsqlquerygtAbfrage der Datenbank über XSU (kann
über zusätzliche Optionen gesteuert werden /
siehe nächste Folie) - ltxsqldmlgterlaubt die Ausführung beliebiger DML-
und DDL-Operationen (INSERT, CREATE TABLE etc.)
und jedes PL/SQL-Blockes - ltxsqlinsert-requestgtEinfügen von XML-Dokumenten
in die Datenbank (Voraussetzung kanonisches
Format) - ltxsqldelete-requestgtLöschen von Zeilen aus
SQL-Tabelle, Angabe der Schlüsselspalten
erforderlich - ltxsqlupdate-requestgtÄnderung von Zeilen einer
SQL-Tabelle, identifizierende Spalten angeben
48Anpassung von XSQL Queries
Attribute für xsqlquery
rowset-element Elementname für Anfrageergebnis leerer String, wenn kein Elementname gewünscht
row-element Elementname für jede Zeile im Anfrageergebnis leerer String, wenn kein Name gewünscht
max-rows Maximalanzahl von Zeilen, die vom Ergebnis ausgegeben werden sollen, sinnvoll z.B. für Top-N-Queries
skip-rows Anzahl von Zeilen, die übersprungen werden soll vor Darstellung des Ergebnisses
id-attribute Attributname für id-Attribute für jede Zeile im Anfrageergebnis
id-attribute-column Zu nutzender Spaltenname, um den Wert des id-Attributs in jeder Ergebniszeile zu liefern
null-indicator Wenn auf y oder yes gesetzt Null-Indicator-Attribut bei den Elementen genutzt, dessen Wert NULL ist
49XSQL Query Parameter
Beispiel Deklaration einer parametrisierten
Query in einer XSQL Page
lt?xml version1.0 ?gt lt?xml-stylesheet
typetext/xsl hrefemp.xsl?gt ltxsqlquery
connectiondemo xmlnsxsqlurnoracle-xsql fi
nd sortENAME null-indicatoryesgt SELECT
FROM EMP WHERE ENAME LIKE _at_find ORDER
BY _at_sort lt/xsqlquerygt
Die Parameterwerte können in einer URL geliefert
werden, z.B. http//localhost/xsql/demo/emp.xsql?
findAsortSAL
50Nested Cursor
- erzeugen in SQL-Anfragen die XML-typische
Baumstruktur (anstelle von Tabellen) - Beispiel
FBEREICH STUDIENGANG SEMESTER BEZEICHNUNG
IMN IN 1 Grundlagen der Informatik
IMN IN 1 Analysis 1
IMN -IN - 1.Semester - Grundlagen
der Informatik - Analysis 1
51Beispiel Nested Cursor
- Tiefe 1 Gruppierte Auflistung aller
Fachbereiche - Tiefe 2 Auflistung der Studiengänge pro
Fachbereich - Tiefe 3 Auflistung der Semester pro Studiengang
und Fachbereich - Tiefe 4 Auflistung aller Fächer pro Semester
und Studiengang und Fachbereich
52Beispiel Nested Cursor (2)
- Tiefe 3 Fachbereich ? Studiengang ? Semester
ltROWSETgt ltROW num"1"gt
ltFBEREICHgtIMNlt/FBEREICHgt ltSTUDGANGgt
ltSTUDGANG_ROW num"1"gt
ltSTUDIENGANGgtINlt/STUDIENGANGgt
ltSEMESTERgt ltSEMESTER_ROW num"1"gt
ltSEMESTERgt1lt/SEMESTERgt
lt/SEMESTER_ROWgt ltSEMESTER_ROW
num"2"gt ltSEMESTERgt2lt/SEMESTERgt
lt/SEMESTER_ROWgt
lt/SEMESTERgt lt/STUDGANG_ROWgt
lt/STUDGANGgt lt/ROWgt . . . lt/ROWSETgt
53Beispiel Nested Cursor (3)
- Tiefe 3 Fachbereich ? Studiengang ? Semester
- SQL-Befehl mit Nested Cursor (XML-Output vgl.
vorige Folie)
select f.fbereich, cursor (select
fa.studiengang, cursor (select fae.semester
from faecher fae where fae.fbereichf.fbere
ich and fae.studiengangfa.studiengang
group by fae.semester) as semester from
faecher fa where fa.fbereichf.fbereich group by
fa.studiengang) as studgang from faecher f
group by f.fbereich
- Kommentare
- GROUP BY verhindert Redundanz im Baum
- in WHERE-Klausel des Cursors Referenz auf die
höheren Ebenen
54Aufruf XSQL Page Processor
Kommando- Zeile
Java Applikation
XSQL Page Processor
XSQL Servlet
Java Server Page
55XSQL Servlet Environment
Web Server mit Servlet Engine
XSQL Page Processor
http
JDBC
Web-Browser
Oracle DB
XSQL Servlet