Обновить значение элемента xml в Oracle - PullRequest
0 голосов
/ 02 апреля 2012

Имея столбец XMLTYPE в таблице Oracle, я хотел бы обновить значения некоторых элементов xml, используя метод UpdateXML, но у меня возникают проблемы из-за пространства имен, которое применяется к элементу xml, который не является родительским. Структура xml моего elmenets выглядит примерно так:

<a>
  <b xmlns="urn:www.someSite.com/myModel">
    <c>my value</c>
  </b>
</a>

и обновление следующей формы не работает:

UPDATE myTable 
  SET myColumn = UpdateXML(myColumn, '/a/b/c','other value', 'xmlns="urn:www.someSite.com/myModel"');

1 Ответ

2 голосов
/ 02 апреля 2012

Почти так же, как этот пост , но уродливее ...

UPDATE myTable
   SET myColumn = updatexml(myColumn ,
                 '/a/*',
                 updatexml(extract(myColumn , '/a/*'),
                           'b/c/text()',
                           'my new value',
                           'xmlns=urn:www.someSite.com/myModel'));

РЕДАКТИРОВАТЬ: Если у вас есть более одного b элемента в a, вам придется изменить весь текст в a, а не для каждого дочернего элемента, поэтому вы можете попробовать:

UPDATE myTable
   SET myColumn = updatexml(myColumn ,
                 '/a/text()',
                 updatexml(extract(myColumn , '/a/*'),
                           'b/c/text()',
                           'my new value',
                           'xmlns=urn:www.someSite.com/myModel'));
...