2014-08-30 43 views
1

我有一個這樣的XML文檔,我必須通過新文本更新The time of begin的值。如何使用UPDATEXML函數執行此操作,即什麼是XPath表達式?使用UPDATEXML在Oracle中更新XML

<dok> 
    <dataSet> 
     <foo>bla bla</foo> 
     <field>START_DATE</field> 
     <label>The time of begin</label> 
    </dataSet> 
    <dataSet> 
     <bar>bla bla</bar> 
     <label>The time of end</label> 
     <field>END_DATE</field> 
    </dataSet> 
</dok> 

我的第一個想法是像這樣的:

UPDATE MY_TABLE SET 
XML_COLUMN = UPDATEXML(XML_COLUMN, '/dok/dataSet/field/text()="START_DATE"/../label/text()', 'The date of start'); 

我不喜歡用軸像following-sibling,因爲裏面dataSet你可能在未知的順序的其他各種要素。

規則必要像:Update "label" at "dataSet" where "field" = 'START_DATE'

回答

2

要符合像field元件(例如,只選擇一個具有特定文本內容)使用尖括號中。另外,在我看來,該函數被稱爲UPDATEXML,而不是XMLUPDATE(請參閱this page)。

嘗試以下操作:

UPDATE MY_TABLE SET XML_COLUMN = 
    UPDATEXML(XML_COLUMN, 
    '/dok/dataSet[field = "START_DATE"]/label/text()','The date of start'); 

注:我熟悉的XPath,而不是與SQL。但據我所見,上面可能還有一個缺少的WHERE子句。

+0

你是對的,這是一個錯字。我糾正我的問題的一致性。是的,WHERE子句缺失,但這不是這裏的問題。 – 2014-08-30 11:11:08