使用UPDATEXML在Oracle中更新XML

时间:2014-08-30 08:56:32

标签: xml oracle xpath sql-update

我有一个像这样的XML文档,我必须用新文本更新The time of begin的值。如何使用UPDATEXML函数执行此操作,即什么是XPath表达式?

<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'

1 个答案:

答案 0 :(得分: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子句。