2012-04-02 2 views
0

Oracle 테이블에 XMLTYPE 열이있는 경우 UpdateXML 메서드를 사용하여 일부 XML 요소의 값을 업데이트하고 싶지만 XML 요소에 적용된 네임 스페이스로 인해 문제가 발생합니다. 부모가 아닙니다. 그것이 작동하지 않는Oracle에서 xml 요소 값 업데이트

<a> 
    <b xmlns="urn:www.someSite.com/myModel"> 
    <c>my value</c> 
    </b> 
</a> 

다음과 같은 형식의 업데이트 : 내 elmenets의 XML 구조는 같은 보이는 ...

UPDATE myTable 
    SET myColumn = UpdateXML(myColumn, '/a/b/c','other value', 'xmlns="urn:www.someSite.com/myModel"'); 
+0

를 네임 스페이스, 즉'의 xmlns에 대한 최소한 짧은 이름을 가지고 XML을 변경할 수 없습니다 : NS1 = "항아리를 : www.someSite .com/myModel "'그렇게하면/a/ns1 : b/ns1 : c' –

+0

아니요, xml을 변경할 수 없습니다. 이것은 데이터베이스에 저장된 형식이며 변경할 수 없습니다. –

답변

2

거의 같은 this post하지만 이보다 등을

UPDATE myTable 
    SET myColumn = updatexml(myColumn , 
       '/a/*', 
       updatexml(extract(myColumn , '/a/*'), 
          'b/c/text()', 
          'my new value', 
          'xmlns=urn:www.someSite.com/myModel')); 

편집 : 만약를 입력 한 경우 에 b 요소가 하나 이상 있으면 변경해야합니다. a 내에서가 아니라 각 자녀에 대한 전체 텍스트, 당신은 시도 할 수 있도록 :

UPDATE myTable 
    SET myColumn = updatexml(myColumn , 
       '/a/text()', 
       updatexml(extract(myColumn , '/a/*'), 
          'b/c/text()', 
          'my new value', 
          'xmlns=urn:www.someSite.com/myModel')); 
관련 문제