使用Oracle操作xml格式数据的方法

 更新时间:2023年07月18日 10:38:50   作者:梁萌  
这篇文章主要介绍了使用Oracle操作xml格式数据的方法,Oracle 数据库的概念和其它数据库不一样,这里的数据库是一个操作系统只有一个库,需要的朋友可以参考下

前期准备

新建一张用来测试的表

-- Create table
create table XMLTEST
(
  id      NUMBER,
  content VARCHAR2(4000)
);

往表中插入数据

insert into XMLTEST (id, content)
values (1, '<root><app><id>1</id><name>张三</name><age>18</age></app><app><id>2</id><name>李四</name><age>20</age></app><app><id>3</id><name>王五</name><age>30</age></app></root>');
insert into XMLTEST (id, content)
values (2, '<root><app><id>1</id><name>张三</name><age>18</age></app></root>');

字段CONTENT的值为字符串格式的xml数据,

ID为1的记录结构如下:

ID为2的记录结构如下:

下面使用sql对xml数据进行查询:

示例一:

将字符串转为xml格式

select xmltype(CONTENT)  vxml from xmltest;

 示例二:

返回一个节点下的所有值

返回id为1的记录,所有的name的值

--extract 返回一个节点下的所有值
select  extract(xmltype(CONTENT), 'root/app/name') vxml from xmltest where id = 1;

示例三:

将xml数据转为表数据格式

当xml只有一个节点时(ID=2的记录)

--extractvalue只能返回一个节点的一个值  
select x.id tblid,
extractvalue(xmltype(x.CONTENT),'root/app/id') as id,
extractvalue(xmltype(x.CONTENT),'root/app/name') as name,
extractvalue(xmltype(x.CONTENT),'root/app/age') as age
from xmltest x where x.id = 2;

当xml有多个节点时(ID=1的记录)

--table和XMLSequence 将xml节点数据转为表数据格式
select  x.id tblid,
extractValue(value(newval),'/app/id') id,
extractValue(value(newval),'/app/name') name,
extractValue(value(newval),'/app/age') name
from xmltest x,
table(XMLSequence( extract(xmltype(x.CONTENT), 'root/app') )) newval
where x.id = 1;

到此这篇关于使用Oracle操作xml格式数据的方法的文章就介绍到这了,更多相关Oracle操作xml格式数据内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 在Oracle中使用正则表达式

    在Oracle中使用正则表达式

    这篇文章介绍了在Oracle中使用正则表达式的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • oracle scott 解锁步骤

    oracle scott 解锁步骤

    本节主要介绍了oracle scott 解锁的具体步骤,需要的朋友可以参考下
    2014-07-07
  • Oracle取整函数用法案例

    Oracle取整函数用法案例

    四舍五入是我们最早接触的数学概念之一,我们日常开发系统中,数字取整也是我们最常接触的一种需求样式,下面这篇文章主要给大家介绍了关于Oracle取整函数用法的相关资料,需要的朋友可以参考下
    2023-06-06
  • 简单三步轻松实现ORACLE字段自增

    简单三步轻松实现ORACLE字段自增

    第一步:创建一个表、第二步:创建一个自增序列以此提供调用函数、第三步:我们通过创建一个触发器,使调用的方式更加简单
    2013-11-11
  • 安装Oracle10g遭遇ins_ctx.mk问题解决方法

    安装Oracle10g遭遇ins_ctx.mk问题解决方法

    在CentOS6.2操作系统下,安装oracle10g时遭遇ins_ctx.mk问题,这是缺少glibc-devel的32位包所导致,下面是解决方法
    2014-09-09
  • [Oracle] Data Guard 之 三种保护模式介绍

    [Oracle] Data Guard 之 三种保护模式介绍

    Data Guard提供如下三种数据保护模式,以下是对这三种保护模式进行了详细的分析介绍,需要的朋友可以参考下
    2013-07-07
  • oracle中的decode的使用介绍

    oracle中的decode的使用介绍

    这篇文章主要介绍了oracle中的decode函数的一些使用小技巧,需要的朋友可以参考下
    2013-09-09
  • Oracle如何实现跨库查询

    Oracle如何实现跨库查询

    在一个数据库中某个用户下编写一个存储过程,在存储过程中使用DBLINK连接另一个数据库,从此数据库中的一个用户下取数,然后插入当前的数据库中的一个表中
    2017-05-05
  • oracle中not exists对外层查询的影响详解

    oracle中not exists对外层查询的影响详解

    这篇文章主要给大家介绍了关于oracle中not exists对外层查询的影响,文中介绍的非常详细,需要的朋友可以参考下。
    2017-02-02
  • Oracle行级触发器的使用操作

    Oracle行级触发器的使用操作

    这篇文章主要介绍了Oracle行级触发器的使用,创建触发器并使用dblink在插入时进行数据同步,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-05-05

最新评论