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

 

转载于:https://www.cnblogs.com/lyf681888/p/3953142.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值