Oracle XmlType实现XML增删改查

假设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','');

 

posted @ 2014-09-03 10:49  liuyunfeng  阅读(1356)  评论(0编辑  收藏  举报