2016-11-07 2 views
0

Annahme habe ich eine XML in XMLTYPE Spalte, die wie folgt aussieht:Oracle UpdateXML keine gültige xPath

<n:ROOT xmlns:app="http://company/acms/content/DocType" xmlns:n="http://company/acms/content/DocType"> 
    <Content> 
     <Definition> 
     <Code>DocType</Code> 
     <Version>1</Version> 
     </Definition> 
     <DocType> 
     <Info> 
      <DocumentType>DocType</DocumentType> 
      <DocumentClass>Other</DocumentClass> 
      <CustomerID>12323423</CustomerID> 
      <FinancialAccountID>12312312</FinancialAccountID> 
      <MSISDN>34534534</MSISDN> 
      <CustomerType>Consumer</CustomerType> 
      <CustomerSubType>Consumer-Platinum</CustomerSubType> 
      <FirstName>Name</FirstName> 
      <ServiceType>ServiceType</ServiceType> 
      <DocumentSource>BadValueHere</DocumentSource> 
      <BoxReferenceNumber>BoxXXX</BoxReferenceNumber> 
      <Industry>OTHERS</Industry> 
      <CreationDate>2015-01-01</CreationDate> 
      <DocumentID>6666</DocumentID> 
      <CreatedBy>UBIX</CreatedBy> 
      <DocumentOrigin>HD</DocumentOrigin> 
      <Notes>Document location on File System: /path/to/doc.TIF</Notes> 
      <Resource parseType="none"> 
       <URL>/path/filename.pdf</URL> 
       <FileName>filename.pdf</FileName> 
       <MimeType>image/tiff</MimeType> 
      </Resource> 
      <FileType>tiff</FileType> 
     </Info> 
     <Permissions> 
      <GroupPermissions> 
       <GroupName>99</GroupName> 
       <Permissions>C</Permissions> 
      </GroupPermissions> 
      <GroupPermissions> 
       <GroupName>30</GroupName> 
       <Permissions>W</Permissions> 
      </GroupPermissions> 
      <GroupPermissions> 
       <GroupName>66</GroupName> 
       <Permissions>R</Permissions> 
      </GroupPermissions> 
     </Permissions> 
     </DocType> 
    </Content> 
</n:ROOT> 

Jetzt brauche ich das Document Element zu aktualisieren, auf einen neuen Wert.

Ich habe versucht, die folgende Abfrage:

SET CONTENT_DATA = UPDATEXML(CONTENT_DATA, 
    '/n:ROOT/Content/DocType/Info/DocumentSource/text()', 'Test') 
where CONTENT_ID=6666; 

Allerdings, wenn ich versuche, es zu laufen, erhalte ich Oracle-Fehler: SQL-Fehler: ORA-31013: Ungültige XPATH Ausdruck 31013. 00000 - „Ungültige XPATH Ausdruck " * Ursache: XPATH-Ausdruck, der an die Funktion übergeben wird, ist ungültig. * Aktion: Überprüfen Sie den XPath-Ausdruck auf mögliche Syntaxfehler.

Dokumentation für UpdateXML ist: https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions205.htm es etwa 5. Element spricht den Namespace angeben, aber ich habe kein Glück hatte immer es :( Es gibt absolut keine Beispiele zu arbeiten, wie es auf Google in meinem Szenario zu verwenden, ? ...

Kann jeder Experten bitte helfen

Antwort

0

probieren sie den XPath: //Content/DocType/Info/DocumentSource/text()

+0

Sorry, alten Kommentar gelöscht - es hat nicht funktioniert auf ausgewählten Extrakt, aber es funktioniert auf UpdateXML :) Warum!? Ich möchte es besser verstehen ... – Carmageddon

+0

Ich verstehe die Oracle-Umgebung nicht im Detail (obwohl ich weiß, wie schwierig es ist, gute Fehlermeldungen zu erzeugen, wenn das Entwicklungsteam zu groß wird ...). Grundsätzlich ist die Syntax des XPath-Ausdrucks in Ordnung, also ist die Sache, die am wahrscheinlichsten falsch ist, dass das Namespacepräfix "n" nicht an irgendeinen URI gebunden wurde. Sie müssen also entweder herausfinden, wie Sie mit dieser bestimmten XPath-API Namespace-Präfixe binden können, oder Sie müssen den Ausdruck so umschreiben, dass keine Namespace-Bindungen erforderlich sind. @svasa nahm den letzteren Ansatz, der faul ist, aber in diesem Fall gut funktioniert. –

+0

Danke Michael. Ich weiß, dass der Fehler mit dem Namespace von all meinen Google-Suchen gestern zusammenhängt, aber nicht ein einzelnes Beispiel der Verwendung des 5. Parameters der Funktion für Namespace. Die Aktualisierungsabfrage wird langsam ausgeführt. In 2 Stunden werden jetzt über 10 Millionen Datensätze aktualisiert. Könnte es wegen der einfachen Problemumgehung ohne Namespace sein, dass es langsamer wird? – Carmageddon

Verwandte Themen