2017-02-01 6 views
0

同じ名前の3つのタグ要素を持つXMLTYPEがあります。私は ';'とともに '。'最後の1つでこのようなもの:Oracle 12cの最後のタグの値を置換するXMLTYPE更新

SELECT XMLQUERY (
      'copy $tmp := . modify 
      (for $i in $tmp/root/test/text() 
      return replace value of node $i 
        with ''.'') 
      return $tmp' 
      PASSING XMLTYPE (
        '<root><test>asdasdsada;</test><test>lkjasdhalskdjhlakjsdh;</test><test>tirari;</test></root>') 
      RETURNING CONTENT) 
    FROM DUAL 

私の結果は次のようになります。

<root><test>asdasdsada;</test><test>lkjasdhalskdjhlakjsdh;</test><test>tirari.</test></root> 

おかげ

答えて

1

あなたがtestすべてのノードを変更している、とあなたはピリオドで完全に内容を交換する瞬間。あなたが望むものではないあなたの期待される出力から。

testノードの数を変数に数えてから、[postition()=$n]を使用して、最終ノードに置き換えるだけで済みます。その後、唯一の;.に、むしろ、ノードのテキスト全体の内容を交換するよりも、変更するreplace()またはtranslate()機能を使用することができます。

SELECT XMLQUERY (
      'copy $tmp := . modify 
      (let $n := count($tmp/root/test) 
      for $i in $tmp/root/test[position()=$n]/text() 
      return replace value of node $i with replace($i, ";", ".")) 
      return $tmp' 
      PASSING XMLTYPE (
        '<root><test>asdasdsada;</test><test>lkjasdhalskdjhlakjsdh;</test><test>tirari;</test></root>') 
      RETURNING CONTENT) AS RESULT 
    FROM DUAL; 

RESULT                             
------------------------------------------------------------------------------------------------------------------------ 
<root><test>asdasdsada;</test><test>lkjasdhalskdjhlakjsdh;</test><test>tirari.</test></root> 
+0

2000ポイントをあなたに!ありがとう。私は 'テスト'の数を得ることができませんでした。それがなければ、私は論理を続けることができませんでした...ありがとう! – milheiros

関連する問題