这段时间,我使用系统表里面有clob字段里面存放的xml信息,我们如何对xml进行增删改查操作呢,自己参考了很多也学到很多,给大家分享一下
首先我们先建测试表
CREATE TABLE EFGP_231.FORMINSTANCE_2019_07_20_test1 ( OID CHAR(32) NOT NULL ENABLE, FIELDVALUES CLOB NOT NULL ENABLE )
创建完以后,clob字段放入我们xml数据,具体是什么呢,
<quanxian>
<Textbox6 id="Textbox6" dataType="java.lang.String" perDataProId=""></Textbox6>
<Textbox9 id="Textbox9" dataType="java.lang.String" perDataProId="">1205</Textbox9>
<Textbox10 id="Textbox10" dataType="java.lang.String" perDataProId="">2019/07/18</Textbox10>
<TextArea14 id="TextArea14" dataType="java.lang.String" perDataProId=""></TextArea14>
<SerialNumber id="SerialNumber" dataType="java.lang.String">zx-2019074674</SerialNumber>
<Textbox21 id="Textbox21" dataType="java.lang.String" perDataProId=""></Textbox21>
<HiddenTextField0 id="HiddenTextField0" dataType="java.lang.String" perDataProId=""/>
<Checkbox0 id="Checkbox0" dataType="java.lang.String">0</Checkbox0>
<Checkbox1 id="Checkbox1" dataType="java.lang.String"/>
<Checkbox2 id="Checkbox2" dataType="java.lang.String"/>
<Checkbox3 id="Checkbox3" dataType="java.lang.String"/>
<Checkbox4 id="Checkbox4" dataType="java.lang.String"/>
<Checkbox5 id="Checkbox5" dataType="java.lang.String"/>
<Textbox11 id="Textbox11" dataType="java.lang.String" perDataProId=""></Textbox11>
<HiddenTextField1 id="HiddenTextField1" dataType="java.lang.String" perDataProId=""/>
<HiddenTextField2 id="HiddenTextField2" dataType="java.lang.String" perDataProId="">1205</HiddenTextField2>
<RadioButton18 id="RadioButton18" dataType="java.lang.String"/>
<TextArea19 id="TextArea19" dataType="java.lang.String" perDataProId=""/>
<Textbox0 id="Textbox0" dataType="java.lang.String" perDataProId="">19060071</Textbox0>
<Textbox1 id="Textbox1" dataType="java.lang.String" perDataProId=""></Textbox1>
<Checkbox7 id="Checkbox7" dataType="java.lang.String"/>
<Checkbox9 id="Checkbox9" dataType="java.lang.String"/>
<Checkbox8 id="Checkbox8" dataType="java.lang.String"/>
<TextArea0 id="TextArea0" dataType="java.lang.String" perDataProId=""/>
<Checkbox6 id="Checkbox6" dataType="java.lang.String"/>
<HiddenTextField3 id="HiddenTextField3" dataType="java.lang.String" perDataProId=""/>
<HiddenTextField4 id="HiddenTextField4" dataType="java.lang.String" perDataProId="">R</HiddenTextField4>
<Checkbox10 id="Checkbox10" dataType="java.lang.String"/>
<Checkbox11 id="Checkbox11" dataType="java.lang.String"/>
<Dropdown13 id="Dropdown13" dataType="java.lang.String">SX003</Dropdown13>
<TextArea15 id="TextArea15" dataType="java.lang.String" perDataProId=""></TextArea15>
<TextArea25 id="TextArea25" dataType="java.lang.String" perDataProId=""></TextArea25>
<Checkbox24 id="Checkbox24" dataType="java.lang.String"/>
<TextArea26 id="TextArea26" dataType="java.lang.String" perDataProId=""/>
<hd5 id="hd5" dataType="java.lang.String" perDataProId=""/>
<hd6 id="hd6" dataType="java.lang.String" perDataProId=""/>
<ps0 id="ps0" dataType="java.lang.String" perDataProId=""></ps0>
<ps1 id="ps1" dataType="java.lang.String" perDataProId="">SX003</ps1>
<hd0 id="hd0" dataType="java.lang.String" perDataProId="">false</hd0>
<SubjectInfo id="SubjectInfo" dataType="java.lang.String" perDataProId=""></SubjectInfo>
<GroupArrayInfo id="GroupArrayInfo" dataType="java.lang.String" perDataProId=""></GroupArrayInfo>
<Checkbox12 id="Checkbox12" dataType="java.lang.String"/>
<Checkbox13 id="Checkbox13" dataType="java.lang.String"/>
</quanxian>
接下来是oracle增删改查
-- 获取不带节点的值,例如:222
select extractvalue(xmltype(t.fieldvalues),'/quanxian/TextArea15') as result from Forminstance_2019_07_20_test1 t where t.oid = '17297af0e588100488896efdb640ce5e';
--修改
UPDATE Forminstance t SET t.fieldvalues =
updatexml(xmltype(t.fieldvalues),'/quanxian/Textbox6','<Textbox6>魏伟111</Textbox6>').getClobVal()
WHERE t.oid = '17297af0e588100488896efdb640ce5e'
--删除
update Forminstance_2019_07_20 t set t.fieldvalues=deletexml(xmltype(t.fieldvalues),'/quanxian/TextArea15').getClobVal()
WHERE t.oid = '17297af0e588100488896efdb640ce5e';
-- 添加xml节点,insertchildxml添加xml节点,参数3默认指定插在该节点后,若该节点不存在,则追加到子节点集合的末尾
-- 添加xml节点,insertchildxmlbefore,和insertchildxmlafter添加xml节点,
---参数3指定插在该节点前或者后,若该节点不存在,则追加到子节点集合的末尾
update Forminstance_2019_07_20_test1 t set t.fieldvalues=insertchildxml(xmltype(t.fieldvalues),'/quanxian','tel',xmltype('<tel>222</tel>')).getClobVal() where t.oid='17297af0e588100488896efdb640ce5e';
update Forminstance_2019_07_20_test1 t set t.fieldvalues=insertchildxmlbefore(xmltype(t.fieldvalues),'/quanxian','Textbox6',xmltype('<TextArea15>111</TextArea15>')).getClobVal() WHERE t.oid = '17297af0e588100488896efdb640ce5e';