使用UPDATEXML在Oracle中更新XML
问题描述:
我有一个这样的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'
答
要符合像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子句。
你是对的,这是一个错字。我纠正我的问题的一致性。是的,WHERE子句缺失,但这不是这里的问题。 – 2014-08-30 11:11:08