2014-05-20 68 views
1

此列(名为docum_xml)具有XML结构是这样的:的Xquery REPLACE语句用于在DB2表中的多个节点

<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数据类型的表达式“(项目(),项目()+)”不能使用时,数据类型“项() “预计在上下文中。

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

谢谢! 斯特拉

回答

1

尝试在修改使用这样的:

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

更新TABLENAME 集DOCUM_XML = XMLQUERY(” 变换 复制$新:= $ documxml 修改( 为$电话$新//电话 返回替换节点$ phone的值WITH fn:replace($ phone,'''','''') ) return $ new'PASSING DOCUM_XML AS“documxml”); – Stella

+0

我试过这个,但由于语法错误而出错。我在哪里做错了? – Stella

+0

错误是什么? – prker