1 / 38

Entwicklung von XML-Anwendungen mit ORACLE XSU

Oberseminar Datenbanken Andreas Rebs, 01INM. Entwicklung von XML-Anwendungen mit ORACLE XSU. Oberseminar Datenbanken Andreas Rebs, 01INM. Erste Fragen. Was bedeutet eigentlich XSU ? Nach welchem Prinzip arbeitet XSU ?

morley
Download Presentation

Entwicklung von XML-Anwendungen mit ORACLE XSU

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Oberseminar Datenbanken Andreas Rebs, 01INM Entwicklung von XML-Anwendungen mit ORACLEXSU

  2. Oberseminar Datenbanken Andreas Rebs, 01INM 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: <?xml version='1.0'?> <ROWSET> <ROW num="1"> <EMPNO>7369</EMPNO> <ENAME>Smith</ENAME> <JOB>CLERK</JOB> <MGR>7902</MGR> <HIREDATE>12/17/1980 0:0:0</HIREDATE> <SAL>800</SAL> <DEPTNO>20</DEPTNO> </ROW> </ROWSET>

  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 <?xml version='1.0'?> <ROWSET> <ROW num="1"> <EMPNO>7369</EMPNO> <JOB>CLERK</JOB> <SAL>800</SAL> <DEPTNO>20</DEPTNO> </ROW> </ROWSET> 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 "<username>/<password>" • withDTD

  14. Oberseminar Datenbanken Andreas Rebs, 01INM XSU Command Line Front End (SELECT) • rowsetTag "<tag_name>" • rowTag "<tag_name>" • rowIdAttr "<row_id_attribute_name>" • rowIdColumn "<row_id_column_name>" • useNullAttrId • maxRows "<maximum_number_of_rows>" • skipRows "<number_of_rows_to_skip>" • fileName "<sql_query_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 "<username>/<password>" • rowTag "<tag_name>"

  16. Oberseminar Datenbanken Andreas Rebs, 01INM XSU Command Line Front End (INSERT) • ignoreCase • commitBatch "<commit_size>"

  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 = DriverManager.getConnection("jdbc:oracle:oci8:scott/tiger@");

  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 = DriverManager.getConnection("jdbc:oracle:oci8:scott/tiger @"); 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 = DriverManager.getConnection("jdbc:oracle:oci8:scott/tiger@"); 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 = DriverManager.getConnection("jdbc:oracle:oci8:scott/tiger@"); 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 = DriverManager.getConnection("jdbc:oracle:oci8:scott/tiger@"); 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 Guidehttp://otn.oracle.com/docs/tech/xml/oracle_xsu/doc_library/adx04xsu.html • Oracle9i Application Developer's Guidehttp://download-eu.oracle.com/otndoc/oracle9i/901_doc/appdev.901/a88894/toc.htm • Oracle8i Application Developer's Guidehttp://otn.oracle.com/docs/products/oracle8i/doc_library/817_doc/appdev.817/a86030/adx04xsu.htm

More Related