假设XML的内容如下:
<员工列表>
<员工身份证号="2203021977XXXXXXX"姓名="LYF"性别="1"出生日期="1977-10-1"年龄="38"/>
<员工身份证号="2201831980XXXXXXX"姓名="TLM"性别="0"出生日期="1980-10-16"年龄="34"/>
</员工列表>
1、插入记录
SELECT INSERTXMLAFTER(XMLTYPE('
<员工列表>
<员工身份证号="2203021977XXXXXXX" 姓名="LYF" 性别="1" 出生日期="1977-10-1" 年龄="38"/>
<员工身份证号="2201831980XXXXXXX" 姓名="TLM" 性别="0" 出生日期="1980-10-16" 年龄="34"/>
</员工列表>
'),
'/员工列表/员工[last()]',
XMLTYPE('<员工身份证号="220302XXXXXXXXXXXX" 姓名="LYL" 性别="0" 出生日期="2006-9-26" 年龄="8"/>'))
FROM DUAL;
执行上述插入记录的SQL语句后,XML内容如下:
<员工列表>
<员工身份证号="2203021977XXXXXXX"姓名="LYF"性别="1"出生日期="1977-10-1"年龄="38"/>
<员工身份证号="2201831980XXXXXXX"姓名="TLM"性别="0"出生日期="1980-10-16"年龄="34"/>
<员工身份证号="220302XXXXXXXXXXXX"姓名="LYL"性别="0"出生日期="2006-9-26"年龄="8"/>
</员工列表>
使用如下SQL也可实现插入记录的效果
select insertchildxml(xmltype('
<员工列表>
<员工身份证号="2203021977XXXXXXX" 姓名="LYF" 性别="1" 出生日期="1977-10-1" 年龄="38"/>
<员工身份证号="2201831980XXXXXXX" 姓名="TLM" 性别="0" 出生日期="1980-10-16" 年龄="34"/>
</员工列表>
'),'/员工列表','员工',xmltype('<员工身份证号="220302XXXXXXXXXXX" 姓名="LYL" 性别="0" 出生日期="2006-9-26" 年龄="8"/>'),'') a
from dual;
2、插入字段
SELECT INSERTCHILDXML(XMLTYPE('
<员工列表>
<员工身份证号="2203021977XXXXXXX" 姓名="LYF" 性别="1" 出生日期="1977-10-1" 年龄="38"/>
<员工身份证号="2201831980XXXXXXX" 姓名="TLM" 性别="0" 出生日期="1980-10-16" 年龄="34"/>
</员工列表>
'),
'/员工列表/员工[@姓名="LYF"]',
'@备注',
'这是一个好员工!') A
FROM DUAL;
执行上述插入字段的SQL语句后,XML内容如下:
<员工列表>
<员工身份证号="2203021977XXXXXXX"姓名="LYF"性别="1"出生日期="1977-10-1"年龄="38"备注="这是一个好员工!"/>
<员工身份证号="2201831980XXXXXXX"姓名="TLM"性别="0"出生日期="1980-10-16"年龄="34"/>
</员工列表>
将插入字段SQL中的[@姓名="LYF"]去掉再执行,效果如下:
<员工列表>
<员工身份证号="2203021977XXXXXXX"姓名="LYF"性别="1"出生日期="1977-10-1"年龄="38"备注="这是一个好员工!"/>
<员工身份证号="2201831980XXXXXXX"姓名="TLM"性别="0"出生日期="1980-10-16"年龄="34" 备注="这是一个好员工!"/>
</员工列表>
3、更新记录
select updatexml(xmltype('
<员工列表>
<员工身份证号="2203021977XXXXXXX" 姓名="LYF" 性别="1" 出生日期="1977-10-1" 年龄="38"/>
<员工身份证号="2201831980XXXXXXX" 姓名="TLM" 性别="0" 出生日期="1980-10-16" 年龄="34"/>
</员工列表>
'),'/员工列表/员工[@姓名="LYF"]/@出生日期','1977-8-3','')
from dual;
执行上述更新记录的SQL语句后,XML内容如下:
<员工列表>
<员工身份证号="2203021977XXXXXXX"姓名="LYF"性别="1"出生日期="1977-8-3"年龄="38"/>
<员工身份证号="2201831980XXXXXXX"姓名="TLM"性别="0"出生日期="1980-10-16"年龄="34"/>
</员工列表>
4、删除记录
删除姓名等于LYF的记录,如下所示:
select deletexml(xmltype('
<员工列表>
<员工身份证号="2203021977XXXXXXX" 姓名="LYF" 性别="1" 出生日期="1977-10-1" 年龄="38"/>
<员工身份证号="2201831980XXXXXXX" 姓名="TLM" 性别="0" 出生日期="1980-10-16" 年龄="34"/>
</员工列表>
'),'/员工列表/员工[@姓名="LYF"]')
FROM dual
删除效果如下:
<员工列表>
<员工身份证号="2201831980XXXXXXX"姓名="TLM"性别="0"出生日期="1980-10-16"年龄="34"/>
</员工列表>
5、删除字段
select deletexml(xmltype('
<员工列表>
<员工身份证号="2203021977XXXXXXX" 姓名="LYF" 性别="1" 出生日期="1977-10-1" 年龄="38"/>
<员工身份证号="2201831980XXXXXXX" 姓名="TLM" 性别="0" 出生日期="1980-10-16" 年龄="34"/>
</员工列表>
'),'/员工列表/员工/@年龄')
FROM dual
删除年龄字段后的XML内容如下
<员工列表>
<员工身份证号="2203021977XXXXXXX"姓名="LYF"性别="1"出生日期="1977-10-1"/>
<员工身份证号="2201831980XXXXXXX"姓名="TLM"性别="0"出生日期="1980-10-16"/>
</员工列表>
实际更新表中XML的SQL如下:
UPDATE FS_FREQ_PLAN FP
SET FREQ_PLAN_XML = UPDATEXML(FP.FREQ_PLAN_XML,
'/频率规划/分组[@使用部门代码=""]/@使用部门代码','999','');