Модификация XML-контента в Oracle 11g r2 - PullRequest
2 голосов
/ 10 ноября 2011

Я имел дело с проблемой в 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 Ответ

0 голосов
/ 10 ноября 2011
  • 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")
...