• Keine Ergebnisse gefunden

Entwicklung von XML-Anwendungen mit ORACLE

N/A
N/A
Protected

Academic year: 2022

Aktie "Entwicklung von XML-Anwendungen mit ORACLE"

Copied!
38
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Entwicklung von XML-Anwendungen

mit ORACLE XSU

(2)

Erste Fragen

• Was bedeutet eigentlich XSU ?

• Nach welchem Prinzip arbeitet XSU ?

• Wie kann man die Funktionalitäten von XSU überhaupt nutzen ?

(3)

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-

(4)

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)

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

(6)

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)

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

(8)

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)

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)

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)

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)

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)

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)

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)

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>"

(16)

XSU Command Line Front End (INSERT)

– ignoreCase

– commitBatch "<commit_size>"

(17)

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)

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)

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)

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)

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-

(22)

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)

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)

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)

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)

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)

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)

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)

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:

(30)

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)

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)

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)

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)

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)

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);

(36)

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)

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)

Quellen

• Oracle XML SQL Utility User Guide

http://otn.oracle.com/docs/tech/xml/oracle_xsu/d oc_library/adx04xsu.html

• Oracle9i Application Developer's Guide

http://download-eu.oracle.com/otndoc/oracle9i /901_doc/appdev.901/a88894/toc.htm

• Oracle8i Application Developer's Guide

http://otn.oracle.com/docs/products/oracle8i/d

oc_library/817_doc/appdev.817/a86030/adx04xsu.

Referenzen

ÄHNLICHE DOKUMENTE

– repräsentiert durch section group im CREATE INDEX - Befehl / PARAMETERS Klausel. – erlauben inhaltsbasiertes Retrieval, beschränkt auf spezifische

-- STORE AS CLOB erzwingt Speicherung als CLOB CREATE TABLE letter OF XMLTYPE;.. -- STORE AS CLOB erzwingt Speicherung

-- parse xml file, build XMLDocument

create or replace procedure insProc(xmlDoc IN CLOB, tableName IN VARCHAR2) is.

erhältlich, die dann selbst übersetzt werden müssen (configure, make, make install). 8.3; http://www.tcl.tk/software/tcltk/downloadnow84.tml) sollten zumindest unter Linux eh

Wohl aber ließe sich denken, daß wir auch in den genannten. Pronominibus das Numerativ .Stück, Individuum&#34; zu

kis als Umbildung von ki scheitert daran, daß in diesem Fall auch andere wortscbließende k{i) zu kis hätten werden mUssen. Übrigens bleiben für den, der dieses ki-s anders

nimmt, daß es sie zerbricht oder zerschmettert. Gar nicht einleuchtend aber ist es, wenn auch ürmibhib plnvamänab sich auf das „rötliche Roß&#34;. beziehen soll. Oij)enbebo's