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

</员工列表>

Oracle XmlType实现XML增删改查

上一篇:如何在脚本中执行SQL语句并获得结果输出?


下一篇:Microsoft SQL Server 2012 管理 (2): Auditing