Oracle-PLSQL: Daten aus XML-Datei in die Datenbank einlesen - wie?

2 Antworten

Für diese Frage ist http://asktom.oracle.com/ vermutlich das bessere Forum.

Ich habe zwar selber über 20 Jahre Oracle Erfahrungen, aber (noch) niemals diese Problematik.

Viel Erfolg!


fromhell 
Beitragsersteller
 17.10.2012, 14:47

Falls es jemanden interessiert:

Ich habe es nun über den Parser gelöst, also XMLPARSER, dadurch konnte ich über XMLDOM auf Tags zugreifen (siehe Beispiel) :

FUNCTION READ_XML( pi_Location IN VARCHAR2,
                   pi_Name     IN VARCHAR2 )
RETURN BOOLEAN IS
    vcFile  CLOB;
    vParser DBMS_XMLPARSER.Parser;
    vDOMDoc DBMS_XMLDOM.DOMDocument;
    vDOMNL  DBMS_XMLDOM.DOMNodeList;
    vDOMN   DBMS_XMLDOM.DOMNode;
BEGIN
    --Datei-Inhalt in CLOB einlesen
    vcFILE := DBMS_XSLPROCESSOR.READ2CLOB( pi_Location, pi_Name );
    -- neue Parserinstanz erstellen
    vParser := DBMS_XMLPARSER.newParser;
    -- CLOB mit XML-Inhalt parsen  
    DBMS_XMLPARSER.parseCLOB( vParser, vcFile );
    -- Document-Instanz in DOMDoc erstellen
    vDOMDoc := DBMS_XMLPARSER.getDocument( vParser );
    -- Parser-Instanz freigeben
    DBMS_XMLPARSER.freeParser( vParser );

    -- NodeList mit den Elementen der XML-Datei erstellen ( eine Art Array )
    vDOMNL := DBMS_XMLDOM.getElementsByTagName( vDOMDoc, '*' );

    -- Elemente der NodeList durchlaufen
    FOR cur_art IN 0 .. DBMS_XMLDOM.getLength( vDOMNL ) - 1
    LOOP
    -- auf ein einzelnes Element zugreifen
    vDOMN := DBMS_XMLDOM.ITEM( vDOMNL, cur_art );

    -- Hier auf die Elemente zugreifen, zum Beispiel so:
    DBMS_OUTPUT.PUT( DBMS_XMLDOM.getNodeName( vDOMN ) );

    -- ChildNode 'öffnen' um Wert auszulesen
    DBMS_XMLDOM.getFirstChild( vDOMN );

    -- Wert auslesen
    DBMS_OUTPUT.PUT( ' = ' || DBMS_XMLDOM.getNodeValue( vDOMN );
  END LOOP;

    -- Document-Instanz freigeben
    DBMS_XMLDOM.FREEDOCUMENT( vDOMDoc );
    RETURN( TRUE );
EXCEPTION
WHEN OTHERS THEN
    -- Im Falle eines Fehler Document- und Parserinstanz freigeben
    DBMS_XMLDOM.FREEDOCUMENT( vDOMDoc );
    DBMS_XMLPARSER.freeParser( vParser );
    RETURN( FALSE );
END READ_XML;

Viele Grüße

Soviel ich weiß, gibt es XML-Editoren (auch kostenlose im Internet), mit denen man den Inhalt einer XML-Datei sowohl einsehen als auch editieren kann. Ich selbst erstelle eine XML-Datei für eine SEPA-Lastschrift (Bankeinzug) und kann daraus auch eine Liste erzeugen. Ich mache das alles mit eigener Programmierung, damit ist ja alles lösbar.

Auch MicroSoft hat einen XML-Editor. Dieser ist aber selbst für Testzwecke kaum verwendbar.

Zu Deiner Oracle-Datenbank. Es ist schon lange her, dass ich mal damit gearbeitet habe. Oracle hat auf Kompatiblität gesetzt und wollte auf jeder Plattform präsent sein. Das wurde so gelöst, dass Oracle nicht die Datenbank als Software geliefert hat, sondern einen komplett eingerichteten UNIX-Server. Das vom Anwender verwendete Betriebssystem spielte damit keine Rolle. Ich vermute mal, dass Oracle das heute immer noch so macht.