Xquery替换多个节点的语句

时间:2014-05-20 23:30:31

标签: sql replace db2 xquery

DB2 Table中的这一列(名为docum_xml)具有如下的xml结构:

    <member>
      <client1>
         <phone>510-000-0001</phone>
      </client1>
      <client2></client2>
      <client3>
         <phone>510-000-0002</phone>
      </client3>
      ...
    </member>

我想做一个xmlquery来摆脱标签中所有潜在的破折号。我写的查询是:

UPDATE TABLENAME
SET DOCUM_XML = XMLQUERY('
 TRANSFORM
 COPY $new := $documxml
 MODIFY(
 DO REPLACE VALUE OF $new//phone WITH fn:replace($documxml//phone,''-'',''''))
 RETURN $new' PASSING DOCUM_XML AS "documxml");

但它给了我一个错误说: SQL16003N数据类型的表达式&#34;(item(),item()+)&#34;当数据类型&#34; item()&#34;时不能使用预计会在上下文中出现。

我意识到它错了,因为我试图更新多个节点,所以我认为这里可能需要一个for循环。但是我坚持构造for循环并将正确的数据返回给我的DB2列。有人可以帮帮我吗?

谢谢! 斯特拉

1 个答案:

答案 0 :(得分:1)

尝试在修改中使用它:

for $phone in $new//phone
return 
    replace value of node $phone
    with fn:replace($phone,''-'','''')