Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Entwicklung von XML-Anwendungen mit ORACLE XSU Oberseminar Datenbanken Andreas Rebs, 01INM.

Ähnliche Präsentationen


Präsentation zum Thema: "Entwicklung von XML-Anwendungen mit ORACLE XSU Oberseminar Datenbanken Andreas Rebs, 01INM."—  Präsentation transkript:

1 Entwicklung von XML-Anwendungen mit ORACLE XSU Oberseminar Datenbanken Andreas Rebs, 01INM

2 Erste Fragen Was bedeutet eigentlich XSU ? Nach welchem Prinzip arbeitet XSU ? Wie kann man die Funktionalitäten von XSU überhaupt nutzen ?

3 Oberseminar Datenbanken Andreas Rebs, 01INM Was bedeutet eigentlich XSU ? Oracle XML-SQL Utility Bindeglied zwischen relationalen Daten- banken und XML Generierung von XML aus Daten einer relationalen Datenbank Einfügen von XML in relationale Daten- banken ab Oracle8i (Version 8.1.7) im Installati- onspaket integriert

4 Oberseminar Datenbanken Andreas Rebs, 01INM Nach welchem Prinzip arbeitet XSU ? Generierung von XML-Dokumenten in ihrer String-Darstellung bzw als DOM- Modell aus SQL-Abfragen heraus Extrahieren von Daten aus XML-Doku- menten und Verwendung dieser für Ein- fügeoperationen auf Tabellen Extrahieren von Daten aus XML-Doku- menten zum Zwecke von Aktualisierungs- und Löschoperationen auf Datensätze einer Tabelle

5 Oberseminar Datenbanken Andreas Rebs, 01INM Generierung von XML (SELECT) CREATE TABLE emp ( EMPNO NUMBER, ENAME VARCHAR2(20), JOB VARCHAR2(20), MGR NUMBER, HIREDATE DATE, SAL NUMBER, DEPTNO NUMBER ); Ausführen einer SQL-Abfrage Bsp.: SELECT * FROM emp WHERE EMPNO=7369;

6 Oberseminar Datenbanken Andreas Rebs, 01INM Generierung von XML (SELECT) Analyse der Metadaten der Ergebnismenge Konvertierung in folgende Form: 7369 Smith CLERK /17/1980 0:0:

7 Oberseminar Datenbanken Andreas Rebs, 01INM Einfügen aus XML (INSERT) Analyse der Metadaten der Zieltabelle Generierung eines Statements der Form: INSERT INTO emp (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,DEPTNO) VALUES (?,?,?,?,?,?,?); Extrahieren der zu den Metadaten passen- den Elemente aus dem XML-Dokument Ausführen des generierten SQL-State- ments unter Verwendung der extrahierten Daten

8 Oberseminar Datenbanken Andreas Rebs, 01INM Aktualisieren mit XML (UPDATE) Festlegung von Schlüsselattributen, die zur Identifizierung der zu aktualisierenden Datensätze dienen Festlegung der zu aktualisierenden Attri- bute; sonst erfolgt Akualisierung aller Attri- bute Analyse der Metadaten der Zieltabelle Generierung eines Update-Statements Extrahieren der Daten aus XML-Dokument

9 Oberseminar Datenbanken Andreas Rebs, 01INM Aktualisieren mit XML (UPDATE) Bsp.:EMPNO Schlüsselspalte SAL zu aktualisierende Spalte 7369 CLERK UPDATE emp SET SAL=800 WHERE EMPNO=7369;

10 Oberseminar Datenbanken Andreas Rebs, 01INM Löschen mit XML (DELETE) Festlegung von Schlüsselattributen, die zur Identifizierung der zu löschenden Datensätze dienen Analyse der Metadaten der Zieltabelle Generierung eines DELETE-Statements Extrahieren der Daten aus XML-Dokument Ausführung des generierten SQL-State- ments unter Verwendung der extrahierten Daten

11 Oberseminar Datenbanken Andreas Rebs, 01INM Wie kann man XSU benutzen ? drei verschiedene Möglichkeiten –XSU Command Line Front End –XSU Java API –XSU PL/SQL API Ausführung direkt in der Datenbank, in einer Client-Umgebung oder auf Web- Server möglich

12 Oberseminar Datenbanken Andreas Rebs, 01INM XSU Command Line Front End XSU Funktionalitäten zum Generieren von XML aus relationalen Datenbanken und zum Einfügen von XML in relationale Datenbanken vorhanden Verwendung dieser Funktionen durch Aufruf der Java-Klasse OracleXML Aufruf über Kommandozeile in der Form: java OracleXML Parameter

13 Oberseminar Datenbanken Andreas Rebs, 01INM XSU Command Line Front End (SELECT) Verwendung des Parameters getXML für die Java-Klasse OracleXML, gefolgt von weiteren optionalen Parametern und dem SQL-Statement Beispiel: java OracleXML getXML –user "scott/tiger" "SELECT * FROM emp" Optionen: –user " / " –withDTD

14 Oberseminar Datenbanken Andreas Rebs, 01INM XSU Command Line Front End (SELECT) –rowsetTag " " –rowTag " " –rowIdAttr " " –rowIdColumn " " –useNullAttrId –maxRows " " –skipRows " " –fileName " "

15 Oberseminar Datenbanken Andreas Rebs, 01INM XSU Command Line Front End (INSERT) Verwendung des Parameters putXML für die Java-Klasse OracleXML, gefolgt von weiteren optionalen Parametern und den Namen vom XML-Dokument und der Ziel- tabelle Beispiel: java OracleXML putXML –user "scott/tiger" –fileName "data.xml" "emp" Optionen: –user " / " –rowTag " "

16 Oberseminar Datenbanken Andreas Rebs, 01INM XSU Command Line Front End (INSERT) –ignoreCase –commitBatch " "

17 Oberseminar Datenbanken Andreas Rebs, 01INM XSU Java API XSU-Funktionalitäten werden über die Java-Klassen OracleXMLQuery und OracleXMLSave zum Einbinden in Java- Applikationen angeboten Registrierung der JDBC-Klasse und Ver- bindung mit Datenbank herstellen import oracle.jdbc.driver.*; DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); Connection conn =

18 Oberseminar Datenbanken Andreas Rebs, 01INM XSU Java API (SELECT) zur Generierung von XML wird die Java- Klasse OracleXMLQuery verwendet Erzeugung einer Instanz von OracleXMLQuery mit Übergabe des SQL- Statements und der Verbindung als Para- meter Beispiel: OracleXMLQuery qry = new OracleXMLQuery(conn, "SELECT * FROM emp");

19 Oberseminar Datenbanken Andreas Rebs, 01INM XSU Java API (SELECT) import java.sql.*; import oracle.xml.sql.query.*; import oracle.jdbc.*; public class sampGetXML { public static void main(String args[]) throws SQLException { DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); Connection conn = OracleXMLQuery qry = new OracleXMLQuery(conn,"select * from emp"); String xmlString = qry.getXMLString(); System.out.println(" OUTPUT IS:\n"+xmlString); qry.close(); conn.close(); }

20 Oberseminar Datenbanken Andreas Rebs, 01INM XSU Java API (SELECT) statt der String-Darstellung kann auch die DOM-Darstellung generiert werden Generierung erfolgt über die Funktion "getXMLDOM()" Beispiel: XMLDocument domDoc = (XMLDocument)qry.getXMLDOM(); Paginating Reults –"setSkipRows()" –"setMaxRows()"

21 Oberseminar Datenbanken Andreas Rebs, 01INM XSU Java API folgende Schreiboperationen auf die Datenbank stehen zur Verfügung: –INSERT –UPDATE –DELETE die Java-Klasse OracleXMLQuery stellt die notwendigen Funktionen bereit Erzeugung einer Instanz von OracleXMLSave mit Übergabe des XML- Dateinamens als Parameter

22 Oberseminar Datenbanken Andreas Rebs, 01INM XSU Java API (INSERT) zum Einfügen von Inhalten aus XML- Dokumenten steht die Funktion "insertXML()" zur Verfügung als Parameter wird der Dateiname des XML-Dokuments übergeben; wenn nötig, mit Pfadangabe Rückgabewert dieser Funktion ist die An- zahl eingefügter Datensätze

23 Oberseminar Datenbanken Andreas Rebs, 01INM XSU Java API (INSERT) public class sampInsert{ public static void main(String args[]) throws SQLException{ String tabName = "emp"; String fileName = "sampdocins.xml"; DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); Connection conn = OracleXMLSave sav = new OracleXMLSave(conn, tabName); String [] colNames = new String[5]; colNames[0] = "EMPNO"; sav.setUpdateColumnList(colNames); URL url = sav.getURL(fileName); int rowCount = sav.insertXML(url); System.out.println(" successfully inserted "+rowCount+" rows into "+tabName); conn.close(); }

24 Oberseminar Datenbanken Andreas Rebs, 01INM XSU Java API (UPDATE) zum Aktualisieren von Datensätzen anhand der Daten aus XML-Dokumenten steht die Funktion "updateXML()" zur Verfügung als Parameter wird der Dateiname des XML-Dokuments übergeben; wenn nötig, mit Pfadangabe Rückgabewert dieser Funktion ist die An- zahl aktualisierter Datensätze

25 Oberseminar Datenbanken Andreas Rebs, 01INM XSU Java API (UPDATE) public class sampUpdate{ public static void main(String args[]) throws SQLException{ String tabName = "emp"; String fileName = "sampdocupd.xml"; DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); Connection conn = String [] keyColNames = new String[1]; keyColNames[0] = "EMPNO"; String [] updateColNames = new String[2]; updateColNames[0] = "SAL"; OracleXMLSave sav = new OracleXMLSave(conn, tabName); sav.setKeyColumnList(keyColNames); sav.setUpdateColumnList(updateColNames); URL url = sav.getURL(fileName); int rowCount = sav.updateXML(url); System.out.println(" successfully updated "+rowCount+" rows from "+ tabName); conn.close(); }

26 Oberseminar Datenbanken Andreas Rebs, 01INM XSU Java API (DELETE) zum Löschen von Datensätzen anhand der Daten aus XML-Dokumenten steht die Funktion "deleteXML()" zur Verfügung als Parameter wird der Dateiname des XML-Dokuments übergeben; wenn nötig, mit Pfadangabe Rückgabewert dieser Funktion ist die An- zahl gelöschter Datensätze

27 Oberseminar Datenbanken Andreas Rebs, 01INM XSU Java API (DELETE) public class sampDelete{ public static void main(String args[]) throws SQLException{ String tabName = "emp"; String fileName = "sampdocdel.xml"; DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); Connection conn = OracleXMLSave sav = new OracleXMLSave(conn, tabName); String [] keyColNames = new String[1]; keyColNames[0] = "DEPTNO"; sav.setKeyColumnList(keyColNames); URL url = sav.getURL(fileName); int rowCount = sav.deleteXML(url); System.out.println(" successfully deleted "+rowCount+" rows from "+ tabName); conn.close(); }

28 Oberseminar Datenbanken Andreas Rebs, 01INM XSU PL/SQL API XSU-Funktionalitäten werden über die Packages DBMS_XMLQuery und DBMS_XMLSave in einer PL/SQL-Um- gebung zur Verfügung gestellt diese Packages spiegeln alle Operationen der XSU Java API wider

29 Oberseminar Datenbanken Andreas Rebs, 01INM XSU PL/SQL API (SELECT) Erzeugung eines Context Handles mittels der Funktion "newContext()"; SQL-Abfrage wird als Parameter übergeben Beispiel: queryCtx := DBMS_XMLQuery.newContext('SELECT * FROM emp'); eigentliche Generierung von XML mittels der Funktion "getXML()"; Rückgabewert ist das XML-Dokument als CLOB Beispiel: result := DBMS_XMLQuery.getXML(queryCtx);

30 Oberseminar Datenbanken Andreas Rebs, 01INM XSU PL/SQL API (SELECT) declare queryCtx DBMS_XMLquery.ctxType; result CLOB; begin queryCtx := DBMS_XMLQuery.newContext('SELECT * FROM emp'); result := DBMS_XMLQuery.getXML(queryCtx); printClobOut(result); DBMS_XMLQuery.closeContext(queryCtx); end; /

31 Oberseminar Datenbanken Andreas Rebs, 01INM XSU PL/SQL API (SELECT) Funktion "getDTD()" liefert die Document Type Definition Funktionen "setSkipRows()" und "setMaxRows()" analog zur XSU Java API Umbenennung von Standard-Tag-Namen über die Funktionen "setRowsetTag()" und "setRowTag()" möglich Binding

32 Oberseminar Datenbanken Andreas Rebs, 01INM XSU PL/SQL API (SELECT) declare queryCtx DBMS_XMLquery.ctxType; result CLOB; begin queryCtx := DBMS_XMLQuery.newContext( 'SELECT * FROM emp WHERE empno = :EMPNO AND ename = :ENAME'); DBMS_XMLQuery.setBindValue(queryCtx,'EMPNO',7566); DBMS_XMLQuery.setBindValue(queryCtx,'ENAME','JONES'); result := DBMS_XMLQuery.getXML(queryCtx); printClobOut(result); DBMS_XMLQuery.closeContext(queryCtx); end; /

33 Oberseminar Datenbanken Andreas Rebs, 01INM XSU PL/SQL API Erzeugung eines Context Handles mittels der Funktion "newContext()"; Name der Zieltabelle wird als Parameter übergeben Beispiel: saveCtx := DBMS_XMLSave.newContext('emp'); eigentliche Ausführung der Schreiboperation mittels "insertXML()", "updateXML()" oder "deleteXML()"; Übergabeparameter sind das XML-Dokument als CLOB oder VARCHAR2 und der Name der Zieltabelle als VARCHAR2

34 Oberseminar Datenbanken Andreas Rebs, 01INM XSU PL/SQL API (INSERT) "setUpdateColumn()" optional create or replace procedure testInsert(xmlDoc IN CLOB, tableName IN VARCHAR2) is insCtx DBMS_XMLSave.ctxType; rows number; begin insCtx := DBMS_XMLSave.newContext(tableName); DBMS_XMLSave.clearUpdateColumnList(insCtx); DBMS_XMLSave.setUpdateColumn(insCtx,'EMPNO'); rows := DBMS_XMLSave.insertXML(insCtx, xmlDoc); DBMS_XMLSave.closeContext(insCtx); end; /

35 Oberseminar Datenbanken Andreas Rebs, 01INM XSU PL/SQL API (UPDATE) "setUpdateColumn()" optional create or replace procedure testUpdate(xmlDoc IN CLOB, tableName IN VARCHAR2) is updCtx DBMS_XMLSave.ctxType; rows number; begin updCtx := DBMS_XMLSave.newContext(tableName); DBMS_XMLSave.clearUpdateColumnList(updCtx); DBMS_XMLSave.setUpdateColumn(updCtx,'SAL'); DBMS_XMLSave.setUpdateColumn(updCtx,'JOB'); DBMS_XMLSave.setKeyColumn(updCtx,'EMPNO'); rows := DBMS_XMLSave.updateXML(updCtx, xmlDoc); DBMS_XMLSave.closeContext(updCtx); end; /

36 Oberseminar Datenbanken Andreas Rebs, 01INM XSU PL/SQL API (DELETE) "setKeyColumn()" optional create or replace procedure testDelete(xmlDoc IN CLOB, tableName IN VARCHAR2) is delCtx DBMS_XMLSave.ctxType; rows number; begin delCtx := DBMS_XMLSave.newContext(tableName); DBMS_XMLSave.setKeyColumn(delCtx,'DEPTNO'); rows := DBMS_XMLSave.deleteXML(delCtx, xmlDoc); DBMS_XMLSave.closeContext(delCtx); end; /

37 Oberseminar Datenbanken Andreas Rebs, 01INM Zusammenfassung leistungsfähiges Werkzeug zum Daten- austausch zwischen XML und relationalen Datenbanken verschiedene Möglichkeiten der Nutzung von XSU vorhanden fehlende Möglichkeit für UPDATE- und DELETE-Operationen bei Zugriff über das Command Line Front End

38 Oberseminar Datenbanken Andreas Rebs, 01INM Quellen Oracle XML SQL Utility User Guide oc_library/adx04xsu.html oc_library/adx04xsu.html Oracle9i Application Developer's Guide eu.oracle.com/otndoc/oracle9i/901_doc/appdev. 901/a88894/toc.htm eu.oracle.com/otndoc/oracle9i/901_doc/appdev. 901/a88894/toc.htm Oracle8i Application Developer's Guide _library/817_doc/appdev.817/a86030/adx04xsu. htm _library/817_doc/appdev.817/a86030/adx04xsu. htm


Herunterladen ppt "Entwicklung von XML-Anwendungen mit ORACLE XSU Oberseminar Datenbanken Andreas Rebs, 01INM."

Ähnliche Präsentationen


Google-Anzeigen