2016-11-07 51 views
0

我在XMLTYPE列中的XML,看起來像如下:甲骨文如updateXML不接受有效的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> 

現在我需要更新DocumentSource元素,爲一個新值。

我嘗試以下查詢:

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

然而,當我嘗試運行它,我得到Oracle錯誤: SQL錯誤:ORA-31013:無效的XPATH表達 31013. 00000 - 「無效的XPATH表達式「 *原因:傳遞給函數的XPATH表達式無效。 *操作:檢查xpath表達式是否有可能的語法錯誤。對於如updateXML

文檔是:https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions205.htm 它談論第五元素指定的命名空間,但我有沒有運氣得到它的工作:( 有絕對如何在我的谷歌的場景使用零個實例?...

哪位高手可以幫

回答

0

剛剛嘗試中的XPath://Content/DocType/Info/DocumentSource/text()

+0

對不起,刪除舊的評論 - 它沒有對選擇提取工作,但它適用於如updateXML :)爲什麼!?我想更好地理解它...... – Carmageddon

+0

我不太瞭解Oracle環境的細節(儘管我知道在開發團隊變得太大時要生成好的錯誤消息是多麼困難......)。基本上XPath表達式的語法是可以的,所以最可能出錯的是命名空間前綴「n」沒有綁定到任何URI。因此,您需要了解這個特定的XPath API如何讓您綁定命名空間前綴,或者您需要以不需要任何命名空間綁定的方式重寫表達式。 @svasa採取了後一種方法,這是懶惰的,但在這種情況下工作正常。 –

+0

謝謝邁克爾。我知道這個錯誤與昨天我所有的谷歌搜索中的命名空間有關,但沒有一個關於如何使用函數的第五個參數作爲命名空間的例子。更新查詢運行緩慢..現在運行2小時,超過10mil記錄進行更新。難道這是因爲沒有命名空間spcifying導致它變慢的簡單解決方法? – Carmageddon