我有以下xml。我想在运行时在Oracle PLSQL中将权重更新为XML中的2KG。怎么做?
<XML><FRUIT_SHOP>AZHAGIRI</FRUIT_SHOP>
<FRUITS>
<FRUIT>
<FRUIT_NAME>ORANGE</FRUIT_NAME>
<ORANGE_FIELDS>
<FIELD>
<KEY>COLOUR</KEY>
<VALUE>LIGHT_RED</VALUE>
</FIELD>
<FIELD>
<KEY>WEIGHT</KEY>
<VALUE>1KG</VALUE>
</FIELD>
</DETAIL>
</ORANGE_FIELDS>
</FRUIT>
</FRUITS>
预期
<XML><FRUIT_SHOP>AZHAGIRI</FRUIT_SHOP>
<FRUITS>
<FRUIT>
<FRUIT_NAME>ORANGE</FRUIT_NAME>
<ORANGE_FIELDS>
<FIELD>
<KEY>COLOUR</KEY>
<VALUE>LIGHT_RED</VALUE>
</FIELD>
<FIELD>
<KEY>WEIGHT</KEY>
<VALUE>2KG</VALUE>
</FIELD>
</DETAIL>
</ORANGE_FIELDS>
</FRUIT>
</FRUITS>
Oracle plsql块应该这样做吗?
答案 0 :(得分:1)
只需使用SQL:
Oracle 11g R2架构设置:
CREATE TABLE table_name ( xml_column ) AS
SELECT XMLTYPE( '<XML>
<FRUIT_SHOP>AZHAGIRI</FRUIT_SHOP>
<FRUITS>
<FRUIT>
<FRUIT_NAME>ORANGE</FRUIT_NAME>
<ORANGE_FIELDS>
<FIELD><KEY>COLOUR</KEY><VALUE>LIGHT_RED</VALUE></FIELD>
<FIELD><KEY>WEIGHT</KEY><VALUE>1KG</VALUE></FIELD>
</ORANGE_FIELDS>
</FRUIT>
</FRUITS>
</XML>' )
FROM DUAL;
UPDATE table_name
SET xml_column = UPDATEXML(
xml_column,
'/XML/FRUITS/FRUIT/ORANGE_FIELDS/FIELD/KEY[text()="WEIGHT"]/../VALUE/text()',
'2KG'
);
查询1 :
SELECT t.xml_column.getClobVal()
FROM table_name t
<强> Results 强>:
| T.XML_COLUMN.GETCLOBVAL() |
|------------------------------------------|
| <XML>
<FRUIT_SHOP>AZHAGIRI</FRUIT_SHOP>
<FRUITS>
<FRUIT>
<FRUIT_NAME>ORANGE</FRUIT_NAME>
<ORANGE_FIELDS>
<FIELD>
<KEY>COLOUR</KEY>
<VALUE>LIGHT_RED</VALUE>
</FIELD>
<FIELD>
<KEY>WEIGHT</KEY>
<VALUE>2KG</VALUE>
</FIELD>
</ORANGE_FIELDS>
</FRUIT>
</FRUITS>
</XML>