0

我正在尝试更新 oracle 中的 xml 列并收到我无法解决的错误。在这里需要一些帮助

如果数据存在那里并且如果它的“美国”那么只更新值或什么都不做

update  USER.TABLE t1
set t1.xmlrecord=
XMLQuery('
   copy $t := . modify (
   if(fn:exists(/row/c2)) then replace value of node $t/row/c2 with concat("firstname",$t/row/@id) else(),
   if(fn:exists(/row/c3)) then replace value of node $t/row/c3 with concat("lastname",$t/row/@id) else(),
   if (fn:exists(/row/c178[@m=83])) and $t/row/c178[@m=82]="USA" then replace value of node $t/row/c178[@m=83] with ("NEW YORK") else(),
   if(fn:exists(/row/c4)) and $t/row/c178[@m=82]="USA" then replace value of node $t/row/c4 with ("Manhattan") else(),
   if(fn:exists(/row/c5)) and $t/row/c178[@m=82]="USA" then replace value of node $t/row/c5 with concat(" NY 10036, USA.",$t/row/@id) else()
            )
            return $t
            '
            passing t1.xmlrecord
            returning content
            );


ORA-19114: XPST0003 - error during parsing the XQuery expression: 
LPX-00801: XQuery syntax error at 'and'
5   if
(fn:exists(/row/c178[@m=83])) and $t/row/c178[@m=82]="USA" then replace 
-                                    ^

ORA-06512: at line 6

我没有得到这两个条件正确(fn:exists(/row/c178[@m=83]))和 $t/row/c178[@m=82]="USA"

这个单一条件工作正常 --> (fn:exists(/row/c178[@m=83])) 因为我将它用于其他一些表,但是当我们添加第二个条件时,一切都搞砸了 --> $t /row/c178[@m=82]="美国"

4

1 回答 1

0

更新 USER.TABLE t1

设置 t1.xmlrecord=

XML查询('

复制 $t := 。调整 (

如果 fn:exists /row/c2 然后将节点 $t/row/c2 的值替换为 concat("firstname",$t/row/@id) else(),

如果 fn:exists /row/c3 然后将节点 $t/row/c3 的值替换为 concat("lastname",$t/row/@id) else(),

如果((fn:exists (/row/c178[@m=83])) 和 ($t/row/c178[@m=82]="USA "))则替换节点 $t/row/c178 的值[@m=83] 与 ("NEY YORK") else() ,

如果 ((fn:exists (/row/c4)) 和 ($t/row/c178[@m=82]="USA ")) 则将节点 $t/row/c4 的值替换为 ("Manhattan ")别的() ,

如果 ((fn:exists (/row/c5)) 和 ($t/row/c178[@m=82]="USA ")) 则将节点 $t/row/c5 的值替换为 concat("NY 10036 , 美国。",$t/row/@id) else()

)

返回$t

'

传递 t1.xmlrecord

返回内容

);

于 2019-02-28T23:11:03.387 回答