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 它談論第五元素指定的命名空間,但我有沒有運氣得到它的工作:( 有絕對如何在我的谷歌的場景使用零個實例?...
哪位高手可以幫
對不起,刪除舊的評論 - 它沒有對選擇提取工作,但它適用於如updateXML :)爲什麼!?我想更好地理解它...... – Carmageddon
我不太瞭解Oracle環境的細節(儘管我知道在開發團隊變得太大時要生成好的錯誤消息是多麼困難......)。基本上XPath表達式的語法是可以的,所以最可能出錯的是命名空間前綴「n」沒有綁定到任何URI。因此,您需要了解這個特定的XPath API如何讓您綁定命名空間前綴,或者您需要以不需要任何命名空間綁定的方式重寫表達式。 @svasa採取了後一種方法,這是懶惰的,但在這種情況下工作正常。 –
謝謝邁克爾。我知道這個錯誤與昨天我所有的谷歌搜索中的命名空間有關,但沒有一個關於如何使用函數的第五個參數作爲命名空間的例子。更新查詢運行緩慢..現在運行2小時,超過10mil記錄進行更新。難道這是因爲沒有命名空間spcifying導致它變慢的簡單解決方法? – Carmageddon