Модификация содержимого 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")