6

XMLType 列を持つ Oracle 11g データベースに、テーブル SECTION_ANSWER があります。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を使用して同様のことを行いました。たとえば、回答が 1 つしかない questionID 1 を更新する場合は、次のようにすることができます。

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

ただし、今回は質問ID 2の更新に問題があります。複数の回答ノードがあり、更新する必要があるコンテンツがどのノードにあるかわからないためです。この種の更新を実行する方法について誰か光を当てることができますか?

4

1 に答える 1

4

これにより、105 を持つ質問 2 のすべての回答ノードが更新されます。

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')
于 2013-12-03T18:02:50.910 に答える