Announcement

Collapse
No announcement yet.

CLOB mit PL/SQL schreiben

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • CLOB mit PL/SQL schreiben

    Hallo

    Ich habe eine Oracle 10g Datenbank in die ich eine große XML Datei als CLOB schreiben möchte. Leider habe ich sehr wenig Erfahrung mit Datenbanken im allgemeinen und Oracle im speziellen.

    Um die Daten zu schreiben will ich die Funktion dbms_lob.write() verwenden. Diese soll angeblich auch mit großen Datenblöcken umgehen können. Allerdings schaffe ich es nicht mal diese Funktion aufzurufen. Dafür müsste ich ja PL/SQL verwenden. Dort scheint auch das Problem zu liegen. Ich habe folgenden fehlerhaften Code:

    Code:
    delete from I_DOCUMENTTEMPLATE where name='VEN';
    
    insert into I_DOCUMENTTEMPLATE (id, name) values ('30001', 'VEN');
    
    declare 
    	myClobVar CLOB := 'string';
    begin
    update I_DOCUMENTTEMPLATE set xsltemplate = myClobVar;
    end;
    
    commit;
    Die Fehlermeldung sieht so aus:

    begin
    update I_DOCUMENTTEMPLATE set xsltemplate = myClobVar;
    end


    ORA-06550: Zeile 1, Spalte 6:
    PLS-00103: Fand das Symbol "" als eines der folgenden erwartet wurde:

    begin case declare exit for goto if loop mod null pragma
    raise return select update while with <an identifier>
    <a double-quoted delimited-identifier> <a bind variable> <<
    close current delete fetch lock insert open rollback
    savepoint set sql execute commit forall merge pipe
    Das Symbol "" wurde ignoriert.
    ORA-06550: Zeile 2, Spalte 55:
    PLS-00103: Fand das Symbol "" als eines der folgenden erwartet wurde:

    begin case declare end exception exit for goto if loop mod
    null pragma raise return select update while with
    <an identifier> <a double-quoted delimited-identi

    Eigentlich müsste der Code stimmen. Kann es auch sein das der Fehler mit der, von mir verwendeten, Eclipse DTP zusammen hängt? Gibt es vielleicht noch eine andere Möglichkeit einen großen CLOB in eine Oracle Datenbank zu schreiben oder steckt einfach nur ein simpler Fehler in meiner Abfrage?

  • #2
    Originally posted by Alaak View Post
    Hallo

    Ich habe eine Oracle 10g Datenbank in die ich eine große XML Datei als CLOB schreiben möchte. Leider habe ich sehr wenig Erfahrung mit Datenbanken im allgemeinen und Oracle im speziellen.

    Um die Daten zu schreiben will ich die Funktion dbms_lob.write() verwenden. Diese soll angeblich auch mit großen Datenblöcken umgehen können. Allerdings schaffe ich es nicht mal diese Funktion aufzurufen. Dafür müsste ich ja PL/SQL verwenden. Dort scheint auch das Problem zu liegen. Ich habe folgenden fehlerhaften Code:

    Code:
    delete from I_DOCUMENTTEMPLATE where name='VEN';
    
    insert into I_DOCUMENTTEMPLATE (id, name) values ('30001', 'VEN');
    
    declare 
    	myClobVar CLOB := 'string';
    begin
    update I_DOCUMENTTEMPLATE set xsltemplate = myClobVar;
    end;
    
    commit;
    Die Fehlermeldung sieht so aus:

    begin
    update I_DOCUMENTTEMPLATE set xsltemplate = myClobVar;
    end


    ORA-06550: Zeile 1, Spalte 6:
    PLS-00103: Fand das Symbol "" als eines der folgenden erwartet wurde:

    begin case declare exit for goto if loop mod null pragma
    raise return select update while with <an identifier>
    <a double-quoted delimited-identifier> <a bind variable> <<
    close current delete fetch lock insert open rollback
    savepoint set sql execute commit forall merge pipe
    Das Symbol "" wurde ignoriert.
    ORA-06550: Zeile 2, Spalte 55:
    PLS-00103: Fand das Symbol "" als eines der folgenden erwartet wurde:

    begin case declare end exception exit for goto if loop mod
    null pragma raise return select update while with
    <an identifier> <a double-quoted delimited-identi

    Eigentlich müsste der Code stimmen. Kann es auch sein das der Fehler mit der, von mir verwendeten, Eclipse DTP zusammen hängt? Gibt es vielleicht noch eine andere Möglichkeit einen großen CLOB in eine Oracle Datenbank zu schreiben oder steckt einfach nur ein simpler Fehler in meiner Abfrage?
    Hallo,

    Vorschlag : Wenn du ein XML in die DB speichern willst, würde ich an deiner Stelle eine XMLTYPE als Spalte in der Tabelle definieren :

    CREATE TABLE testxml
    (doc_id NUMBER,
    xml_doc SYS.XMLTYPE)
    PCTFREE 10
    INITRANS 1
    MAXTRANS 255
    TABLESPACE hoko_data
    STORAGE (
    INITIAL 65536
    MINEXTENTS 1
    MAXEXTENTS 2147483645
    )
    NOCACHE
    MONITORING
    /


    -- Anschliessend kannst du das XML folgendermassen speichern:

    PROCEDURE ADD_XML (i_xml_doc IN SYS.XMLTYPE)
    IS

    BEGIN
    INSERT INTO testxml
    (xml_doc
    )
    VALUES (i_xml_doc
    );
    END;

    - Das ganze natürlich schwer vereinfacht...Wenn du anstelle des Insert ein Update willst, musst du gas ganze anpassen



    Gruss

    Comment


    • #3
      Darauf bin ich auch schon kurz gestoßen. Ich muss das XML allerdings als Stream zwischen EJBs austauschen. Ich bin skeptisch ob das mit diesem XMLTYPE geht.

      Comment


      • #4
        Originally posted by Alaak View Post
        Darauf bin ich auch schon kurz gestoßen. Ich muss das XML allerdings als Stream zwischen EJBs austauschen. Ich bin skeptisch ob das mit diesem XMLTYPE geht.
        - Hmmm...ich bin nicht der grosse Java Guru, aber unser Appserver Entwickler meint, dass sollte problemlos möglich sein. Aber eben, für eine konkrete Lösung für EJB musst du jemand anderen fragen :-)


        Gruss

        Comment


        • #5
          Den Java Kram bekomme ich hin.

          Erst mal danke für die Hilfe. Jetzt kann ich zumindest ein bisschen weiter probieren.

          Comment

          Working...
          X