Обновление узла XML на основе значений дочерних узлов - PullRequest
0 голосов
/ 17 октября 2019

Я пытаюсь обновить значение тега XML на основе узлов-братьев.

Мой XML выглядит следующим образом:

<root>
 <mydata>

  <submission>
   <uname>rosy</uname>
   <idlist>22,23,89</idlist>
   <status>unavailable</status>
   <oldstatus>unavailable</oldstatus>
   </submission>

   <submission>
   <uname>amy</uname>
   <idlist>22,23,89</idlist>
   <status>unavailable</status>
   <oldstatus>unavailable</oldstatus>
   </submission>

   <submission>
   <uname>rosy</uname>
   <idlist>66</idlist>
   <status>unavailable</status>
   <oldstatus>unavailable</oldstatus>
  </submission>

 </mydata>
</root>

У меня есть запрос, который я могу использовать для обновленияузел на основе одного параметра.

UPDATE MYTABLE
         SET MY_DATA =
                UPDATEXML (
                   MY_DATA ,
                      '/root/mydata/submission[idlist=''22,23,89'']/status/text()',
                   'paid', 
                      '/root/mydata/submission[idlist=''22,23,89'']/oldstatus/text()',
                   SYSDATE
                   )
       WHERE ROW_ID = 1234;

То есть, в настоящее время я могу искать узлы на основе "uname" или "idlist". Но я не могу понять, как я мог бы обновлять данные на основе двух параметров вместе.

То есть «Обновлять статус до одобренного, если uname - розовый, а idlist - 22,23,89».

Любойуказатели?

1 Ответ

0 голосов
/ 18 октября 2019

Решение, которое сработало для меня:

SET MY_DATA = UPDATEXML (MY_DATA, '/ root / mydata / submission [idlist =' '22,23,89' 'и uname =' 'rosy''] / status / text ()', 'paid')

По какой-то причине запрос не работает, если в uname есть специальные символы, но если поле содержит только алфавиты или цифры, тогда он работает нормально.

...