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

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

В этом конкретном примере пользователь с именем tim.tom возвращает коды своей подписки "48,68,54 "в библиотеку. Мне нужно 1. Обновите accstatus tim.tom для подписки «48,68,54» на «закрыто» в таблице 1. 2. Получить количество узлов, где accstatus = "pending" для подписки "48,68,54".

Раньше я делал это в C #, но мой код неэффективен при откате, поэтому я пытаюсьсделать это из базы данных.

Структура XML выглядит следующим образом:
Таблица 1

 <root>
    <mylibrarydata>
         <userdata>
             <username>amy.tamy</username>
             <subscriptioncodes>48,68,54</subscriptioncodes>
             <accstatus>pending</accstatus>
         </userdata>
         <userdata>
             <username>hill.till</username>
             <subscriptioncodes>29</subscriptioncodes>
             <accstatus>opened</accstatus>
         </userdata>
         <userdata>
             <username>tim.tom</username>
             <subscriptioncodes>48,68,54</subscriptioncodes>
             <accstatus>pending</accstatus>
         </userdata>
         <userdata>
             <username>tim.tom</username>
             <subscriptioncodes>55</subscriptioncodes>
             <accstatus>closed</accstatus>
         </userdata>
     </mylibrarydata>
 </root>

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

SELECT extract(MY_DATA, '/root/mylibrarydata/userdata/username/text()')
FROM TBL_MY_DATA WHERE MY_ID = 101
WHERE existsnode(MY_DATA, '/root/mylibrarydata/userdata[subscriptioncodes=48,68,54]');
SELECT extract(MY_DATA, '/root/mylibrarydata/userdata[subscriptioncodes=48,68,54]/username/text()')
FROM TBL_MY_DATA WHERE MY_ID = 101

Оба вышеупомянутых запроса возвращают мне данные в следующем формате: amy.tamyhill.tilltim.tomtim.tom

Любые указатели на лучшеподход или что я могу изменить в своем запросе, чтобы получить нужные данные?

...