您的位置:首页 > 博客中心 > 数据库 >

Oracle XmlType实现XML增删改查

时间:2022-03-13 23:21

假设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"/>

</员工列表>

热门排行

今日推荐

热门手游