Announcement

Collapse
No announcement yet.

XMLDOC updaten

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

  • XMLDOC updaten

    Sers Leute,
    die ist mein erster Eintrag in diesem Forum wenn ich irgendetwas Falsch mache sagt es einfach!!

    Ich schreibe gerade an meiner Diplomarbeit, welche eigentlich am besten "gestern" schon fertig sein sollte :-), aber ich habe noch ein paar kleine Probleme bei einem könnt ihr mir vielleicht helfen.

    Ich habe einen XML basierenden Eintag in meiner Oracle - DB und will diesen updaten.

    mein Statment sieht wie folgt aus.

    UPDATE tabstl
    SET XMLDOC = updateXML(XMLDOC,'/STL/Position/@PositionID', '-30683')
    WHERE existsNode(XMLDOC, '//Position[@PositionID =615062]') = 1


    also bei diesem Statment werden aber alle in der STL vorkommenden PositionsID's mit -30683 ersetz.

    Ich möchte aber nur die ID ersetzen welche die PositionsID '615062' hat.


    der knoten in der DB sie wie folgt aus:

    ...
    <Position PositionID="312618" >
    <originalSTL><originalSTLID>15714</originalSTLID>
    <originalSTLVersion>0</originalSTLVersion>
    <originalSTLNumber>EP00017050000</originalSTLNumber>
    </originalSTL>
    <Positionsnummer>0001</Positionsnummer>
    <Menge>1</Menge>
    <Einheit>ST</Einheit>
    <Materialnummer>1.4305 40x75</Materialnummer>
    <Benennung Language="DE" ></Benennung>
    <Benennung Language="EN" ></Benennung>
    <Bemerkung Language="DE" ></Bemerkung>
    <Bemerkung Language="EN" ></Bemerkung>
    </Position>
    ...


    ... also es können weitere Positionen davor oder dannach hängen, aber ich will nur diesen eine, hier ROT makierte, ID ändern, ....

    Wäre super wenn ihr mir helfen könnt, ...
    MFG ANDY

  • #2
    Originally posted by krug-systems.de View Post
    Ich möchte aber nur die ID ersetzen welche die PositionsID '615062' hat.

    MFG ANDY
    - UpdateXML kannst du nicht auf das Ergebnis eines XPATH Statements ausführen, mit anderen Worten ersetzt UdateXML immer einen ganzen XML-Knoten (oder das ganze Dokument)

    Gruss

    Comment


    • #3
      ok, danke aber wie komm ich an diesen wert sonst ran bzw wie kann ich diesen wert updaten ,...

      Comment


      • #4
        Originally posted by krug-systems.de View Post
        ok, danke aber wie komm ich an diesen wert sonst ran bzw wie kann ich diesen wert updaten ,...
        - Hallo, ich gebe dir mal eine Updateprozedur, welche wir so verwenden. Du musst dies halt noch auf deine Situation anapssen.

        PROCEDURE XML_Update_Document_Label (i_Document_ID IN NUMBER, i_sNewLabel in APP_XML_DOCUMENT.document_label%TYPE)
        IS
        xmldata XMLTYPE;
        tmpxml XMLTYPE;
        BEGIN
        -- get the current xmltype record.
        SELECT d.document_xml
        INTO xmldata
        FROM APP_XML_DOCUMENT d
        WHERE d.document_id = i_Document_ID;

        SELECT UPDATEXML (xmldata,'/Report/Metadata/Label','<Label>'|| i_sNewLabel || '</Label>','xmlns="http://www.unisys.com/rumaca/report"')
        INTO tmpxml
        FROM DUAL;

        -- Assign the updated XML document to the current record.
        UPDATE APP_XML_DOCUMENT
        SET document_xml = tmpxml,document_label=i_sNewLabel
        WHERE APP_XML_DOCUMENT.document_id = i_Document_ID;
        COMMIT;

        END;


        - Ich habe in der Tabelle APP_XML_DOCUMENT eine Spalte [document_xml], welche vom Typ SYS.XML_TYPE ist, welche das XML Dokument enthält. Innerhalb des XML will ich den Node ['/Report/Metadata/Label'] mit einem neuen Wert updaten.

        ich hoffe, das hilft :-)


        Gruss

        Comment

        Working...
        X