Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
XQuery(DB2)替换节点(如果存在)。有可能吗?_Db2_Xquery - Fatal编程技术网

XQuery(DB2)替换节点(如果存在)。有可能吗?

XQuery(DB2)替换节点(如果存在)。有可能吗?,db2,xquery,Db2,Xquery,请参见以下查询: 选择 xmlquery ( ' 如果($xml/foo/bar),那么 transform copy$xml:=$xml modify do用一些东西替换$xml/foo/bar返回$xml 其他的 $xml ' 将xmlparse(文档“此处某物”)作为“xml”传递 ) 来自sysibm.sysdummy1 这个查询工作得很好:它替换了/foo/bar节点,我非常高兴。如果/foo/bar节点不存在,我只希望什么也不发生。因此,以下查询应该只返回未修改的XML: 选择 x

请参见以下查询:

选择
xmlquery
(
'
如果($xml/foo/bar),那么
transform copy$xml:=$xml modify do用一些东西替换$xml/foo/bar返回$xml
其他的
$xml
'
将xmlparse(文档“此处某物”)作为“xml”传递
)
来自sysibm.sysdummy1
这个查询工作得很好:它替换了/foo/bar节点,我非常高兴。如果/foo/bar节点不存在,我只希望什么也不发生。因此,以下查询应该只返回未修改的XML:

选择
xmlquery
(
'
如果($xml/foo/bar),那么
transform copy$xml:=$xml modify do用一些东西替换$xml/foo/bar返回$xml
其他的
$xml
'
将xmlparse(文档“此处无任何内容”)作为“xml”传递
)
来自sysibm.sysdummy1
嗯。。。所以我想。事实上,DB2很高兴地告诉我:

SQL16085N XQuery“替换”表达式的目标节点无效

也许我对if-think和“then”-部分的语法有误,这两个部分都是在上面的两个查询中执行的。所以我尝试交换then和else,因为显然DB2不应该尝试执行then和else部分。但这丝毫没有改变任何事情


现在我显然感到困惑。难道不能像我喜欢的那样使用XPath吗,因为无论是否执行,所有路径表达式都必须满足要求?或者我只是做错了什么?

并且您是否使用了任何类型的函数“exists(..)”例如fn:exists(item1,item2…),其中exists函数在参数值不是空序列时返回true,否则返回false?
假设我对db2一无所知:)

我也遇到了类似的问题,所以我解决了这个问题:

select
    xmlquery('
        let $xml0 := <xml><foo><bar/></foo></xml> return
        if ($xml/foo/bar) then
            transform copy $xml := ($xml[foo/bar], $xml0)[1] modify 
            do replace $xml/foo/bar with <bar>some stuff</bar>
            return $xml
        else
            $xml
            ' passing xmlparse(document '<foo>nothing here</foo>') as "xml")
            from sysibm.sysdummy1
选择
xmlquery('
让$xml0:=返回
如果($xml/foo/bar),那么
转换副本$xml:=($xml[foo/bar],$xml0)[1]修改
一定要用一些东西替换$xml/foo/bar
返回$xml
其他的
$xml
'将xmlparse(文档“此处无任何内容”)传递为“xml”)
来自sysibm.sysdummy1

这似乎是一个bug

存在的不是问题。如果($xml/foo/bar)工作得很好,就我所能看到的而言,它做了我希望它做的事情。问题出在替换上。即使没有执行,它也会失败