Oracle 11g r2中的XML内容修改

时间:2011-11-09 20:53:23

标签: xml oracle xquery xmltable

我一直在处理Oracle XML DB(11g R2)中的问题,如下所述:

在一个名为“xml_document”的XMLType列的表中说我有以下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 :(得分:0)

  • 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")