为给定值更新Oracle XMLType列内容

时间:2013-12-03 16:24:56

标签: sql xml oracle xquery updatexml

我在Oracle 11g数据库中有一个表SECTION_ANSWER,它有一个XMLType列。 XML非常简单,它遵循以下结构:

<section sectionID="1">
    <question questionID="1" questionType="text">
        <answer>Green</answer>
    </question>
    <question questionID="2" questionType="multiselect">
        <answer>101</answer>
        <answer>102</answer>
        <answer>105</answer>
        <answer>107</answer>
    </question>
</section>

我需要将'105'的答案更新为'205'。我过去使用UPDATEXML做过类似的事情。例如,如果我要更新只有一个答案的questionID 1,我可以执行以下操作:

UPDATE SECTION_ANSWER sa
SET sa.section_answerxml = updatexml(sa.section_answerxml, '//section[@sectionID="1"]/question[@questionID="1"]/answer/text()', 'BLUE') 

但是,这次更新questionID 2时遇到了麻烦,因为有多个答案节点,我不知道需要更新的内容将在哪个节点中。任何人都可以了解如何执行此操作有什么更新?

1 个答案:

答案 0 :(得分:4)

这将更新问题2中包含105的所有答案节点。

UPDATE SECTION_ANSWER sa
SET sa.section_answerxml = updatexml(sa.section_answerxml,
'//section[@sectionID="1"]/question[@questionID="2"]/answer[text()="105"]/text()', '205')

或者您可以按位置更新

UPDATE SECTION_ANSWER sa
SET sa.section_answerxml = updatexml(sa.section_answerxml,
'//section[@sectionID="1"]/question[@questionID="2"]/answer[position()=3]/text()', '205')