条件插入xquery失败,错误为“;意外插入,应为“其他”;

条件插入xquery失败,错误为“;意外插入,应为“其他”;,xquery,sedna,Xquery,Sedna,我试图在Sedna数据库上执行xquery来有条件地更新容器,如下所示 if(fn:exists(doc("blog")/entries/entry[@active="1" and @id="1"]/comments)) then UPDATE insert <comment active="1"><name>sunil.s</name><email>suni.l.s@gmail.com</email><desc>desbb

我试图在Sedna数据库上执行xquery来有条件地更新容器,如下所示

if(fn:exists(doc("blog")/entries/entry[@active="1" and @id="1"]/comments)) then
UPDATE insert <comment active="1"><name>sunil.s</name><email>suni.l.s@gmail.com</email><desc>desbbh</desc></comment> into doc("blog")/entries/entry[@active="1" and @id="1"]/comments
else
UPDATE insert <comments><comment active="1"><name>sunil.s</name><email>sunil.s@gmail.com</email><desc>sdd</desc></comment></comments> into doc("blog")/entries/entry[@active="1" and @id="1"]
如果(fn:exists(doc(“blog”)/entries/entry[@active=“1”和@id=“1”]/comments)),那么
更新insert sunil.ssuni.l。s@gmail.comdesbbh进入文档(“博客”)/entries/entry[@active=“1”和@id=“1”]/comments
其他的
更新insert sunil.ssunil。s@gmail.comsdd进入文档(“博客”)/entries/entry[@active=“1”和@id=“1”]
但此查询总是失败,并出现以下错误

SEDNA消息:错误XPST0003如果表达式为 不是a.1 EBNF中定义的语法的有效实例。详情:见 (2:8),语法错误,意外插入,应为else

该错误表明它在第二行中预期的是
else
,而不是
insert


有人能帮我理解查询的问题和可能的解决方法吗?

您的查询假设存在一个语法如下的表达式

UPDATE insert expr into expr
XQuery(或XQuery更新工具)中没有这样的表达式。相反,它似乎是Sedna支持的非标准语法

但是,文档()将其称为“语句”,而不是“表达式”,这表明它必须是查询中的“顶级”(最外层)构造

要完成此操作,您可以将查询重写为:

UPDATE
insert
    if ... then <comment>...</comment> else <comments>...</comments>
into
    if ... then doc("blog")/.../comments else doc("blog")/...
更新
插入
如果。。。然后。。。其他的
进入
如果。。。然后doc(“blog”)/…/评论其他doc(“blog”)/。。。
不幸的是,这重复了“如果”条件;目前还不清楚Sedna是否提供了一种语法来分解它,例如

UPDATE
let $c := ...
insert
    if $c then <comment>...</comment> else <comments>...</comments>
into
    if $c then doc("blog")/.../comments else doc("blog")/...
更新
让$c:=。。。
插入
如果是$c,那么。。。其他的
进入
如果是$c,则为doc(“blog”)/…/注释,否则为doc(“blog”)/。。。