在下面的代码中,我尝试将 oldXml2 中的“name”元素插入 oldXml,并将 oldXml 中的“test”属性值更新为“newTest”,结果组合输出为 newXml。代码成功更改了属性值,但是,当我添加:
let $newName := $b/users/user/name
从 oldXml2 获取名称元素的子句停止工作。有没有人可以解决这个问题?
我正在使用 Oracle 11g,它使用 xquery 1.0。
WITH myXml AS (select 1 id, xmltype(
'<users>
<user test="oldvalue">
<userid>id1</userid>
<name>dave</name>
</user>
</users>
'
) oldXml
from dual),
myXml2 AS (select 1 id,xmltype(
'<users>
<user>
<userid>id2</userid>
<name>steve</name>
</user>
</users>
'
) oldXml2
from dual)
SELECT oldXml,oldXml2,
XMLQuery(' copy $c := $a
(: let $newName := $b/users/user/name :) (: If you add this clause it doesnt work:)
modify ( rename node $c/users/user/@test as "newTest")
return $c'
PASSING a.oldXml as "a" ,b.oldXml2 as "b" RETURNING CONTENT) newXml
FROM myXml a
JOIN myXml2 b
ON a.id = b.id;
newXml 中所需的输出是:
<users>
<user test="newTest">
<userid>id1</userid>
<name>dave</name>
</user>
<user>
<userid>id2</userid>
<name>steve</name>
</user>
</users>