2011-11-09 131 views
2

我一直在處理在Oracle XML DB(11克R2)的問題說明如下:XML內容修改

說,在表名爲XMLType列「xml_document」我有以下XML文檔

<?xml encoding="utf-8" ?> 
<books> 
    <book> 
     <author>AUTHORNAME1</author> 
     <title>TITLE1</title> 
     <price>12.33</price> 
    </book> 
    <book> 
     <author>AUTHORNAME2</author> 
     <title>TITLE2</title> 
     <price>9.55</price> 
    </book> 
    <book> 
     <author>AUTHORNAME3</author> 
     <title>TITLE3</title> 
     <price>15.00</price> 
    </book> 
</books> 

現在我想要做的是,隨着「價格> 10」代替所有的書名爲附加的「-expensive」標籤。

' for $book in ora:view("XML_TABLE")//books/book where $book/price > 10 return replace value of node $book/title with concat($book/title/text(),"-expensive") ' 

因此,在Oracle SQLDeveloper中執行查詢後,生成的XML內容將如下所示。

<?xml encoding="utf-8" ?> 
<books> 
    <book> 
     <author>AUTHORNAME1</author> 
     <title>TITLE1-expensive</title> 
     <price>12.33</price> 
    </book> 
    <book> 
     <author>AUTHORNAME2</author> 
     <title>TITLE2</title> 
     <price>9.55</price> 
    </book> 
    <book> 
     <author>AUTHORNAME3</author> 
     <title>TITLE3-expensive</title> 
     <price>15.00</price> 
    </book> 
</books> 

我已經嘗試與如updateXML(),XMLQUERY()和XMLTABLE()方法做出來,仍然不能向前走一步。

任何幫助將不勝感激。

+0

你的XML片斷無效。你錯過了?在XML聲明的末尾:'<?xml encoding =「utf-8」?>'。你也有多個根元素,也許你想把它們包裝成一個''? –

回答

0
  • when是沒有XQuery語句(雖然我不能告訴Oracle XQuery)。嘗試where
  • 字符串連接使用concat(str1, [...], str2)而不是+-操作員完成。

嘗試此查詢:

for $book in ora:view("XML_TABLE")//book 
where $book/price > 10 
return 
    replace value of node $book/title 
    with concat($book/title/text(), "-expensive") 
+0

對不正確的語法感到抱歉。我修好了,仍然沒有工作:) –

+0

我不確定'ora:view'的語義是什麼。 [documentation](http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28369/xdb_xquery.htm#CBAIEJDC)只說它創建關於關係數據的XML視圖,而不是更新。我也找不到任何有關這方面的信息,可悲的是沒有任何證據證實我的假設。我想你將不得不創建一些[永久XML視圖](http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28369/xdb_xquery.htm#CBAIFJJJ)來使用XQuery更新。我的答案中的查詢很好,我使用[BaseX](http://www.basex.org)(替換'ora:view')對其進行了測試。 –