Я пытаюсь обновить значение тегов в столбце 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
Любые указатели на лучшеподход или что я могу изменить в своем запросе, чтобы получить нужные данные?