Модификация содержимого XML в Oracle 11g r2

Я имел дело с проблемой в Oracle XML DB (11g R2), как описано ниже:

Скажем, в таблице со столбцом XMLType с именем "xml_document" у меня есть следующий документ XML

<?xml encoding="utf-8" ?>
<books>
    <book>
        <author>AUTHORNAME1</author>
        <title>TITLE1</title>
        <price>12.33</price>
    </book>
    <book>
        <author>AUTHORNAME2</author>
        <title>TITLE2</title>
        <price>9.55</price>
    </book>
    <book>
        <author>AUTHORNAME3</author>
        <title>TITLE3</title>
        <price>15.00</price>
    </book>
</books>

Теперь я хочу заменить названия всех книг на "цена> 10", добавив тег "-дорогой".

' for $book in ora:view("XML_TABLE")//books/book where $book/price > 10 return replace value of node $book/title with concat($book/title/text(),"-expensive") '

Поэтому после выполнения запроса в Oracle SQLDeveloper полученное содержимое XML будет выглядеть следующим образом.

<?xml encoding="utf-8" ?>
<books>
    <book>
        <author>AUTHORNAME1</author>
        <title>TITLE1-expensive</title>
        <price>12.33</price>
    </book>
    <book>
        <author>AUTHORNAME2</author>
        <title>TITLE2</title>
        <price>9.55</price>
    </book>
    <book>
        <author>AUTHORNAME3</author>
        <title>TITLE3-expensive</title>
        <price>15.00</price>
    </book>
</books>

Я уже пытался сделать это с помощью процедур UPDATEXML(), XMLQUERY() и XMLTABLE() и до сих пор не могу сделать шаг вперед.

Любая помощь будет оценена.

1 ответ

Решение
  • when не является оператором XQuery (хотя я не могу сказать об Oracle XQuery). Пытаться where,
  • Конкатенация строк выполняется с использованием concat(str1, [...], str2), не +-оператором.

Попробуйте этот запрос:

for $book in ora:view("XML_TABLE")//book
where $book/price > 10
return
  replace value of node $book/title
  with concat($book/title/text(), "-expensive")
Другие вопросы по тегам