Oracle – XSQL in der Anwendung Thomas Matzke, 99IN.
-
Upload
kunibert-rader -
Category
Documents
-
view
217 -
download
0
Transcript of Oracle – XSQL in der Anwendung Thomas Matzke, 99IN.
Oracle – XSQL in der Anwendung
Thomas Matzke, 99IN
Inhalt
• Vorstellung von PLANet
• Kurze Einführung der XSQL – Technologie
• Was wird bei PLANet verwendet
•Erklärung der einzelnen Techniken
Vorstellung von PLANet
• Datenbankbasierte Planung von Lehrveranstaltungen als nutzerorientierte Intranet-Lösung– Planer – Professoren und Dozenten
• Erzeugung von Listen– Stundenblatt– Dozentenblatt– Matrikelübersicht
• Auswertung und Statistiken• Flexible Darstellung: HTML, PDF, Graphik, Excel ...
Browser
Servlet-Engine+Server
Request an Server
DBOracle-
Über XSQL-SkriptQueries auf DB
Rückgabe einesResult-Sets
<?xml ver.. <rowset> <row> .... </row>
XML-Generierungaus Result-Set
<html> <body>
HTML
108
9
SVG
mit XSL-StylesheetTransformation in
JDBC
XSQL-Technologie
XSQL-Technologie
Komponenten
• Datenbankserver: Oracle 8.1.6 i / 9.0.2.0.0i - Tablespace auf Oracle 8 in UTF-8 - Tablespace auf Oracle 9 in ISO-8859-1
• Web-Server: Tomcat 3.3 beta http://jakarta.apache.org
• XSQL-Servlet aus XDK 9.0.2.0.0D
XSQL-Technologie
Aufbau eines XSQL-Skripts
<?xml version = "1.0" encoding = "iso-8859-1"><?xml-stylesheet type="text/xsl" href="uebersichthtml.xsl"?> <datapage connection="xml" xmlns:xsql="urn:oracle-xsql">
<xsql:query rowset-element="FBIMN" row-element="DOZENT">select name,vorname,email,telefon from dozent</xsql:query>
</datapage>
XML-Header für Deutschland
Elemente-Bezeichnungfür XML
Query
Alias für DB-Verbindung (xsqlconfig.jar)
XSQL-Technologie
Was wird bei PLANet verwendet
• Single / Multiple Parameters
• Insert, Update, Delete - mit <xsql:xxxxx-request>
- als PL/SQL-Prozedur- als DML-Statement
• Session – Handling über <xsql:set-session-param>
• Nested Cursor
• FO
Erklärung der einzelnen Techniken
Insert mit <xsql:insert-request />
Pflicht-Parameter bzw. Attribute
• table - Tabellenbezeichnung
• transform - Transformationsskript mit Spaltennamen - ermöglicht einfügen mehrerer Datensätze mit einem Aufruf - kann URL oder File sein
Einsatzmöglichkeiten
• bei Formularen
Erklärung der einzelnen Techniken
Insert mit <xsql:insert-request />
Aufbau des Transformsheets
<?xml version = "1.0" encoding="iso-8859-1"?><ROWSET xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xsl:version="1.0"> <ROW> <TITEL><xsl:value-of select="titel"/></TITEL> <VORNAME><xsl:value-of select="vorname"/></VORNAME><NAME><xsl:value-of select="name"/></NAME><FBEREICH><xsl:value-of select="fbereich"/></FBEREICH>……<ADRESSE><xsl:value-of select="adresse"/></ADRESSE></ROW></ROWSET>
SpaltenbezeichnungenGROSS schreiben
Elemente sindSpaltenbezeichnung
Erklärung der einzelnen Techniken
Update mit <xsql:update-request />
Pflicht-Parameter
• table• transform
• key-columns - Angabe der Spaltennamen mit denen Datensatz identifiziert werden soll - Angabe mehrere Spalten möglich, Trennung durch Komma
Pflicht-Parameter bzw. Attribute
Erklärung der einzelnen Techniken
Delete mit <xsql:delete-request />
Pflicht-Parameter
• table• transform
• key-columns - Angabe der Spaltennamen mit denen Datensatz identifiziert werden soll - Angabe mehrere Spalten möglich, Trennung durch Komma
Pflicht-Parameter bzw. Attribute
Erklärung der einzelnen Techniken
Insert, Update, Delete mit <xsql:dml>
• Element besteht aus SQL-Statement
• Statement darf nicht mit Semikolon abgeschlossen werden
• geeignet, wenn nur Single-Parameters verarbeitet werden
• eignet sich auch zum Ausführen von Programmblöcken
• Statements müssen mit 'begin‘ und 'end‘ eingeschlossen werden
• Nachteil bei Blöcken ist nicht eindeutige Fehlerausgabe
Erklärung der einzelnen Techniken
Insert, Update, Delete mit <xsql:include-owa>
• Statements müssen in PL/SQL-Prozedur stehen
• Aufruf erfolgt durch Prozedur-Name
• hinter Prozedur-Name muss Semikolon stehen
• gut geeignet, wenn Parameter noch überprüft werden müssen
Erklärung der einzelnen Techniken
Single / Multiple Parameter
• Parameter aus Formularen bzw. Session-Managment
• Parameter-Anzeige mit <xsql:include-request-params />
• Darstellung in XSQL(generiertes XML):
<datapage><rowset> ...<!--aus Query--></rowset><request>
<parameters>... </parameters><session>... </session><cookies>... </cookies>
</request></datapage>
Single / Multiple Parameters
- kann aus Textfeld, Listbox oder Radio-Button sein
<request> <parameters> <fachid>430</fachid> </parameters></request>
Erklärung der einzelnen Techniken
Single / Multiple Parameters
- kann durch mehrere Checkboxes,Textfelder mit gleichem Namen entstehen
<request> <parameters> <row> <fachid>430 </fachid> </row> <row> <fachid>429</fachid> </row> <row>... </row> </parameters></request>
Erklärung der einzelnen Techniken
Erklärung der einzelnen Techniken
Zugriff auf Single / Multiple Parameter im XSQL-Skript
• Zugriff auf Single-Parameter mit {@name}
• keine Pfadangaben, deswegen dürfen Session-Parameter und Request-Parameter nicht die gleiche Bezeichnung haben
• falls doch, hat Session-Parameter Vorrang
• Zugriff auf alle Multiple-Parameters nicht möglich
• nur erster Parameter wird erfasst
Erklärung der einzelnen Techniken
• Unterscheidung zwischen Single und Multiple-Parameters muss im Transform-Sheet implementiert werden
• Einsatz von <xsl:if> im Transformations-Stylesheet
• funktioniert auch bei Delete und Update
<xsql:insert-request> mit Single/Multiple-Parameters
<?xml version = "1.0" encoding="iso-8859-1"?><ROWSET xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xsl:version="1.0"> <xsl:variable name="checkeiner" select="request/parameters/fachid"/> <xsl:variable name="checkalle" select="request/parameters/row[last()]/fachid"/>
<xsl:if test="$checkeiner != 0 "> <ROW> <FACHID><xsl:value-of select="request/parameters/dozid"/></FACHID></ROW></xsl:if>
<xsl:if test="$checkalle != 0"> <xsl:for-each select="request/parameters/row"><ROW> <FACHID><xsl:value-of select="dozid"/></FACHID> </ROW></xsl:for-each></xsl:if> </ROWSET>
Erklärung der einzelnen Techniken
Erklärung der einzelnen Techniken
<xsql:query> mit Single/Multiple-Parameters
• Query mit Multiple-Parametern kann bei Formularen mit mehreren gleichnamigen Checkboxes auftreten, wenn man z.B. Detailangaben über mehrere Sachen gleichzeitig haben möchte
• Art des Zugriffes auf Parameter mit {@variable} läßt Multiple-Parameter nicht zu
• Lösung: Einsatz von Dummy-Tabellen
• Übergebene Parameter werden vor Ausführung der Query mit <xsql:insert-request> in Dummy-Tabelle gespeichert
• Parameter können dann mit Joins über Dummy-Tabelle verarbeitet werden
Erklärung der einzelnen Techniken
Session-Handling
• Speicherung der Session-Parameter in
<datapage><rowset> ...<!--aus Query--></rowset><request>
<parameters>... </parameters><session>... </session><cookies>... </cookies>
</request></datapage>
Erklärung der einzelnen Techniken
Session-Handling
• Sessionparameter müssen nur einmal gespeichert werden
• Sessionparameter mit gleichem Namen wie Requestparameter haben Vorrang im XSQL-Skript
• Sessionparameter lassen sich überschreiben
Erklärung der einzelnen Techniken
Session-Handling
• Zuweisung mit 'value', wenn Request-Parameter als Session-Parameter gesetzt
<xsql:set-session-param name="logged" value="{@login}"/>
• Zuweisung mit Query, wenn Parameter abhängig vom Request-Parameter aus der Datenbank bestimmt werden
<xsql:set-session-param name="logid">select dozid from dozent where name=(select name from nutzer where login='{@login}')</xsql:set-session-param>
Erklärung der einzelnen Techniken
Nested XML - Cursor
• kann nur in <xsql:query> erzeugt werden
• aus Query wird eine XML-typische Hierarchie erzeugt
• macht Gruppierung nach Werten einfacher
• läßt sich beliebig tief schachteln
• siehe XSU-Skript Folie 45-49
Erklärung der einzelnen Techniken
FO - Formatting Objects
• Ausgabe von PDF über XSQL möglich
• Voraussetzung: - FO-Bibliotheken (fop.jar) http://xml.apache.org/fop
- xsqlserializers.jar (XDK)
• Zugriff auf Processing Engine durch Zusatz-Attribut "serializer=FOP" in Stylesheet-Definition
• zusätzliche Angabe des FO-Namespace in Stylesheet
<xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:fo="http://www.w3.org/1999/XSL/Format" xsl:version="1.0">
Erklärung der einzelnen Techniken
FO - Formatting Objects
• Angabe des Namespace von XSLT-Engine nötig, da sonst nicht mit Templates gearbeitet werden kann
• Seitenrumpf sieht dann wie folgt aus:
<?xml version="1.0" encoding="iso-8859-1"?><xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:fo="http://www.w3.org/1999/XSL/Format" xsl:version="1.0">
<xsl:template match="/"><fo:root> …<!-- FO-Tags--></fo:root></xsl:template></xsl:stylesheet>
Erklärung der einzelnen Techniken
FO - Formatting Objects
• FOP-Beispiel in XSQL-Beispielen von ORACLE
Erklärung der einzelnen Techniken
Generelle Probleme
• Umlaute
• Nullwertbehandlung in Querys - Überprüfung ob Element leer, nicht möglich - siehe Überprüfung bei Multiple Parameters
• Speicherbegrenzung in FOP
• bei Änderungen am Datenmodell sehr viel Korrekturen nötig