在Oracle中更新CLOB字段(xml类型)时需要帮助

时间:2015-10-08 08:39:50

标签: xml oracle

我有一个CLOB列,其数据类型为XML

<?xml version='1.0' encoding='UTF-8'?>
<testRules version="1.0">
    <rule id="1839" name="remit_amount.minimum.dollar_amount">
        <value order="1" modifiedBy="admin" modifiedDate="04/10/2012 15:04:49">5.00</value>
    </rule>
    <rule id="1840" name="remit_amount.maximum.dollar_amount">
        <value order="1" modifiedBy="admin" modifiedDate="04/10/2012 15:04:49">1000.00</value>
    </rule>
</testRules>

现在我想将<rule id="1840"> <value更新为1500.00。

请帮助我为上述更改获取正确的更新脚本。

2 个答案:

答案 0 :(得分:0)

您可以参考以下示例示例并替换您的表格详细信息 -

create table t1 ( x clob );

INSERT
INTO t1 VALUES
  (
    '<Test>      
<GROUP_TYPE>PR</GROUP_TYPE>      
<GROUP_NAME a ="asdsada">A</GROUP_NAME>      
<GROUP_NAME b ="bbbb">B</GROUP_NAME>  
<UNIT>C</UNIT>               
</Test>'
  );

commit;


    UPDATE t1
SET x= updatexml(xmltype.createxml(x),'/Test/GROUP_NAME/text()','CCC').getclobval()
WHERE ExtractValue(xmltype(x),'/Test/GROUP_NAME/@a')='asdsada';

commit;

这将为您提供所需的输出。

答案 1 :(得分:0)

您可以使用UPDATEXML

   UPDATE test_xml SET col =
   UPDATEXML(xmltype(col),
   '/testRules/rule[@id="1839"]/value/text()','1500.00').getClobval();  

请注意,XPATH表达式中的谓词将更新限制为正确的元素。 另请注意,此语句会更新表中的所有行,因此请在适当时添加WHERE条件。

 <?xml version="1.0" encoding="UTF-8"?>
 <testRules version="1.0">
   <rule id="1839" name="remit_amount.minimum.dollar_amount">
     <value order="1" modifiedBy="admin" modifiedDate="04/10/2012 15:04:49">1500.00
     </value>
   </rule>
   <rule id="1840" name="remit_amount.maximum.dollar_amount">
     <value order="1" modifiedBy="admin" modifiedDate="04/10/2012 15:04:49">1000.00
     </value>
   </rule>
 </testRules>