下のコードでは、oldXmlにoldXml2の "name"要素を挿入し、oldXmlの "test"属性値を "newTest"に更新しようとしています。出力はnewXmlです。それが動作しなくなったoldXml2からname要素を取得するためにOracle XMLQueryでの "Transform"とFLWOR式の結合
let $newName := $b/users/user/name
句:私が追加したときに コードが成功し、属性値を変更しますが。 誰かがこの問題の解決策を持っていますか?
私はxquery 1.0を使用するOracle 11gを使用しています。
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で必要な出力は次のようになります。あなたがlet
最初に行うと、それをあなたがコピー/変更しないその中で、独自のreturn
句を、与える必要が
<users>
<user test="newTest">
<userid>id1</userid>
<name>dave</name>
</user>
<user>
<userid>id2</userid>
<name>steve</name>
</user>
</users>
)'行方不明... – Shnugo
あなたがしている最終的な結果はどのようなものです:Xqueryのを作る - あなたの本当のシナリオで達成しようとしている? 2つの入力XMLは表示されていますが、出力XMLは表示されません。どのようにnewNameを使用する予定かわかりません--daveをsteveに変更します(ただし、useridだけを残しますか?)か、1人のユーザーに対して2つの名前ノードを使用しますか? –
Alex - 必要な出力を追加しました –