工作之余,总结一下xml操作的一些方法和心得!

tip: xmltype函数是将clob字段转成xmltype类型的函数,若字段本身为xmltype类型则不需要引用xmltype()函数

同名标签用数组取值的方式获取,但起始值从1开始

一.查询(Query)

1. extract函数,查询节点值,带节点名

1 --获取带节点的值,例如:222

2 select extract(xmltype(e.prj_xml),'/data/project/persons/person[1]/tel').getStringVal() as title from project e where e.zh_title='白夜追逐繁星';3 --备注如果节点表达式查询一个节点的父节点,则会将该父节点下的所有节点包含该父节点查出

Query Result:

tip: extract函数中路径引用text(),查询的节点若重复则自动拼接

select extractvalue(xmltype('12'),'/a/b') from dual; --报错,报只返回一个节点值,因为在a标签下存在两个同名标签b

select extract(xmltype('12'),'/a/b/text()') from dual; --extract+text() 解决同名节点问题,若存在重复节点会自动拼接在一起,但不使用任何拼接符号

2. extractvalue函数,查询节点值,不带节点名

--获取不带节点的值,例如:222

1select extractvalue(xmltype(e.prj_xml),'/data/project/persons/person[1]/tel') as result from project e where e.zh_title='白夜追逐繁星';

Query Result:

Tip: 节点不存在时,查询结果均为空

3. existsnode函数,判断节点是否存在,表示存在,0表示不存在

1select existsnode(xmltype(e.prj_xml),'/data/project/persons/person[1]/tel') as result from project e where e.zh_title='白夜追逐繁星';

Query Result:

4. sys_dburigen,将指定列通过函数生成一个该列的URI值,例如:/PUBLIC/PROJECT/ROW[ZH_TITLE='邹成咁180117']/ZH_TITLE

1select sys_dburigen(e.zh_title) as result from project e where e.zh_title='白夜追逐繁星';

Query Result:

5. sys_xmlAgg,合并查询,将多个xml合并,类似于set集合

-- sys_xmlGen 将xml转成xmltype实例,方便xml合并,sys_xmlAgg用于xml合并

1select sys_xmlAgg(sys_xmlgen(e.prj_xml)) as result from project e where e.zh_title='白夜追逐繁星' or e.zh_title='白夜追逐繁星2' ;

Query Result:

6. xmlforest,将指定列以xml格式查询出来,可指定生成的xml节点名称

1select xmlforest(e.zh_title as zhTitle,e.prj_no as prjNo,e.psn_code as psnCode).getStringVal() as xml from project e where e.zh_title='白夜追逐繁星';

Query Result:

7. xmlelement,为查询出来的xml添加挂载的父节点,并将xml字符串格式化成xml ,与xmlforest函数配套使用

1select xmlelement(data,xmlforest(e.zh_title,e.prj_no,e.psn_code)).getStringVal() as xml from project e where e.zh_title='白夜追逐繁星';

Query Result:

延伸:为data节点添加属性,使用xmlattributes函数

1select xmlelement(data,xmlattributes(e.prj_code as code),xmlforest(e.zh_title,e.prj_no,e.psn_code)).getStringVal() as xml from project e where e.zh_title='白夜追逐繁星';

Query Result:

延伸: XMLCOLATTVAL效果等同于xmlforest函数,但默认会为每个标签添加一个属性name,属性值为列明,若未指定列别名,默认该列列明

1select XMLCOLATTVAL(e.zh_title as zhTitle,e.prj_no as prjNo,e.psn_code as psnCode).getStringVal() as xml from project e where e.zh_title='白夜追逐繁星'

Query Result:

8. xmlConcat,xmlType实例之间联结

1 select xmlelement(data,xmlConcat(xmltype('1'),xmltype('1'))).getStringVal() as result from dual;

Query Result:

9. xmlsequence将一个xml以标签为单位,转换成数组,也就是一行行记录

1 select e.getStringVal() asresult2 from table(xmlsequence(extract(xmltype('23366688'),'/a/*'))) e;

Query Result:

二.添加(Insert)

-- 添加xml节点,insertchildxml添加xml节点,参数3默认指定插在该节点后,若该节点不存在,则追加到子节点集合的末尾

-- 添加xml节点,insertchildxmlbefore,和insertchildxmlafter添加xml节点,参数3指定插在该节点前或者后,若该节点不存在,则追加到子节点集合的末尾

1 update project e set e.prj_xml=insertchildxml(xmltype(e.prj_xml),'/data/project/persons/person[1]','tel',xmltype('222')).getClobVal() where e.zh_title='白夜追逐繁星';2 update project e set e.prj_xml=insertchildxmlbefore(xmltype(e.prj_xml),'/data/project/persons/person[1]','psn_code',xmltype('111')).getClobVal() where e.zh_title='白夜追逐繁星';

三.修改(Update)

-- updatexml用于更新节点值

1 --updatexml用于更新节点值,参数1:需要修改节点的xml字段;参数2:节点路径;参数3:值

2 update project e set e.prj_xml=updatexml(xmltype(e.prj_xml),'/data/project/persons/person[1]/tel','111').getClobVal() where e.zh_title='白夜追逐繁星';3 update project e set e.prj_xml=updatexml(xmltype(e.prj_xml),'/data/project/persons/person[1]/tel/text()','222').getClobVal() where e.zh_title='白夜追逐繁星';

tip: getClobVal()是将xmltype类型转成clob类型方法

四.删除(Delete)

1 --删除xml节点,参数1:需要删除节点的xml字段;参数2:节点路径;

2 update project e set e.prj_xml=deletexml(xmltype(e.prj_xml),'/data/project/persons/person[1]/tel').getClobVal() where e.zh_title='白夜追逐繁星';

oracle 删除xml记录,Oracle之xml的增删改查操作相关推荐

  1. springboot集合MySQL删除_SpringBoot集成Spring JdbcTemplate并完成增删改查操作

    JdbcTemplate是Spring用来简化JDBC操作的核心类,有助于与Spring集成,并且避免了过多冗长的JDBC代码.不过在实际使用中,我们通常使用NamedParameterJdbcTem ...

  2. java调用oracle删除,使用IDEA对Oracle数据库进行简单增删改查操作

    1.1 java中的数据存储技术 在java中,数据库存取技术可分为如下几类: 1.jdbc直接访问数据库 2.jdo(java data object)是java对象持久化的新的规范,也是一个用于存 ...

  3. java jdom进行xml的增删改差_java使用DOM对XML文档进行增删改查操作实例代码

    本文研究的主要是java使用DOM对XML文档进行增删改查操作的相关代码,具体实例如下所示. 源代码: package com.zc.homeWork18; import java.io.File; ...

  4. Oracle+jsp+Servlet的员工表的简单增删改查

    1.引入jar包 2.连接数据库(编写连接数据库工具类) JDBCUtils.java package com.demo.utils;import java.sql.Connection; impor ...

  5. 对xml文件的sax解析(增删改查)之一

    crud(增删改查): c:creat r:retrieve u:update d:delete 以下笔记来自于韩顺平老师的讲解. 现在是用java来操作. 第一步:新建java工程.file-new ...

  6. XML基本概念及增删改查操作

    一.概念及特征: 1. XML 指可扩展标记语言(Extensible Markup Language),用户可以自己定义标签.XML 被设计用来传输和存储数据,而 HTML 用于格式化并显示数据,并 ...

  7. [PYTHON] 对XML文件进行增删改查操作

    PYTHON 操作 XML 读取XML文件 关于XML的介绍 <data> 与 </data> 是一对标签的开始与结束 <property - /> 也是一个正确的 ...

  8. Oracle数据库常见的增删改查操作语句大全

    回收站: show recyclebin (命令行语句) 清空回收站: purge recyclebin 回收站还原已删除表: flashback table table_name to before ...

  9. c# xml的增删改查操作 xmlDocument 的用法

    1.将xml转换为DataTable string path = "";//xml的位置 StringReader sr = null; XmlTextReader xmlRead ...

最新文章

  1. Oracle EBS R12 运行adadmin 安装中文语言包过程中意外中断后的处理
  2. 代码重构(五):继承关系重构规则
  3. D-Link登录时密码错误输入三次而无法登录问题的处理
  4. oracle_home path,ORACLE_HOME迁移后需要设置LD_LIBRARY_PATH环境变量
  5. Fragment学习3--底部tab布局
  6. iphone socket讲解
  7. ORACLE 分页SQL
  8. keepalived+LVS 详解(3) -- VRRP协议简介
  9. 【蓝桥杯真题】2021年蓝桥杯省赛B组题目解析+代码(C/C++)
  10. 计算机网络简历自我认识,计算机网络专业简历的自我评价
  11. 了解传销系列之三 : 开心门
  12. 用最优控制视角看微分几何下的测地线
  13. 程序质量:代码静态检查
  14. linux affinity,Linux CPU Affinity
  15. 新发的日常小实验——Ubuntu安装拼音输入法
  16. 粉丝文化:抖音广告短视频美妆营销中,男明星比女明星更带货?
  17. 三星S8相机黑画面解决
  18. 查询江苏丹阳高考成绩2021,2020年江苏县级市各大高中高考成绩回顾
  19. java.lang.IllegalArgumentException: Failed to decrypt.
  20. 51NOD 1631 小鲨鱼在51nod小学 区间线段树

热门文章

  1. 详解 Linux 中 apt 命令的使用
  2. Webrtc 开源代码的简单介绍
  3. Clojure 学习入门(16)- 正则表达式
  4. 28181之安装SPVMN的视频插件
  5. php写入mysql表格失败,麻烦给我看一下为什么MySQL创建表格失败嘛
  6. arduino串口绘图_Arduino 串口数据可视化
  7. python function if yield_成为Python大牛必须要掌握的高端语法——yield!
  8. 记录一次 自建网盘程序 cloudreve被攻击
  9. 图解虚拟机三种网络连接方式
  10. 我国常用的微型计算机是,2013云南省全国计算机等级考试二级笔试试卷VB理论考试试题及答案...