我在XMLType列(Oracle 10g)中有如下所示的XML结构
<DATA>
<CHILDRENS>
<CHILDRENS_DEF lname="smith">
<CHILD_KOL no="1" name="Id" desc="Id" typ="NUMBER"/>
<CHILD_KOL no="2" name="Fname" desc="Fname" typ="VARCHAR2"/>
</CHILDRENS_DEF>
<CHILDRENS_DATA>
<CHILD_DATA no="1">
<CHILD_COL_VALUE no="1" name="Id">1</CHILD_COL_VALUE>
<CHILD_COL_VALUE no="2" name="Fname">Christopher</CHILD_COL_VALUE>
</CHILD_DATA>
<CHILD_DATA no="2">
<CHILD_COL_VALUE no="1" name="Id">1</CHILD_COL_VALUE>
<CHILD_COL_VALUE no="2" name="Fname">Alice</CHILD_COL_VALUE>
</CHILD_DATA>
<CHILD_DATA no="3">
<CHILD_COL_VALUE no="1" name="Id">1</CHILD_COL_VALUE>
<CHILD_COL_VALUE no="2" name="Fname">John</CHILD_COL_VALUE>
</CHILD_DATA>
</CHILDRENS_DATA>
</CHILDRENS>
<CHILDRENS>
<CHILDRENS_DEF lname="mushroom">
<CHILD_KOL no="1" name="Id" desc="Id" typ="NUMBER"/>
<CHILD_KOL no="2" name="Fname" desc="Fname" typ="VARCHAR2"/>
</CHILDRENS_DEF>
<CHILDRENS_DATA>
<CHILD_DATA no="1">
<CHILD_COL_VALUE no="1" name="Id">1</CHILD_COL_VALUE>
<CHILD_COL_VALUE no="2" name="Fname">Arthur</CHILD_COL_VALUE>
</CHILD_DATA>
</CHILDRENS_DATA>
</CHILDRENS>
</DATA>
如何更新子名称,其中CHILDRENS_DEF lname = smith和CHILD_DATA no = 2 ??
答案 0 :(得分:1)
您可以使用updateXML,
XPATH表达式应该看起来像这样:
DATA/CHILDRENS[CHILDRENS_DEF/@lname="smith"]/CHILDRENS_DATA/CHILD_DATA[@no="2"]/CHILD_COL_VALUE[@name="Fname"]/text()
如果要更新表中的列,它应如下所示:
UPDATE <<your_table>>
SET <<xml_col_name>> = updateXML(<<xml_col_name>>,
'DATA/CHILDRENS[CHILDRENS_DEF/@lname="smith"]/CHILDRENS_DATA/CHILD_DATA[@no="2"]/CHILD_COL_VALUE[@name="Fname"]/text()',
'AB');