Oracle之xml的增删改查操作
工作之余,总结一下xml操作的一些方法和心得!
tip: xmltype函数是将clob字段转成xmltype类型的函数,若字段本身为xmltype类型则不需要引用xmltype()函数
同名标签用数组取值的方式获取,但起始值从1开始
一.查询(Query)
1. extract函数,查询节点值,带节点名
-- 获取带节点的值,例如:<tel>222</tel>
select extract(xmltype(e.prj_xml),'/data/project/persons/person[1]/tel').getStringVal() as title from project e where e.zh_title='白夜追逐繁星';
-- 备注如果节点表达式查询一个节点的父节点,则会将该父节点下的所有节点包含该父节点查出
Query Result:

tip: extract函数中路径引用text(),查询的节点若重复则自动拼接
select extractvalue(xmltype('<a><b>1</b><b>2</b></a>'),'/a/b') from dual; -- 报错,报只返回一个节点值,因为在a标签下存在两个同名标签b
select extract(xmltype('<a><b>1</b><b>2</b></a>'),'/a/b/text()') from dual; -- extract+text() 解决同名节点问题,若存在重复节点会自动拼接在一起,但不使用任何拼接符号
2. extractvalue函数,查询节点值,不带节点名
-- 获取不带节点的值,例如:222
1 select 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表示不存在
1 select 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
1 select 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合并
1 select 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节点名称
1 select 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函数配套使用
1 select 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函数
1 select 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,属性值为列明,若未指定列别名,默认该列列明
1 select 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实例之间联结
select xmlelement(data,xmlConcat(xmltype('<a>1</a>'),xmltype('<b>1</b>'))).getStringVal() as result from dual;
Query Result:

9. xmlsequence将一个xml以标签为单位,转换成数组,也就是一行行记录
select e.getStringVal() as result
from table(xmlsequence(extract(xmltype('<a><b>233</b><c>666</c><d>88</d></a>'),'/a/*'))) e;
Query Result:

二.添加(Insert)
-- 添加xml节点,insertchildxml添加xml节点,参数3默认指定插在该节点后,若该节点不存在,则追加到子节点集合的末尾
-- 添加xml节点,insertchildxmlbefore,和insertchildxmlafter添加xml节点,参数3指定插在该节点前或者后,若该节点不存在,则追加到子节点集合的末尾
update project e set e.prj_xml=insertchildxml(xmltype(e.prj_xml),'/data/project/persons/person[1]','tel',xmltype('<tel>222</tel>')).getClobVal() where e.zh_title='白夜追逐繁星';
update project e set e.prj_xml=insertchildxmlbefore(xmltype(e.prj_xml),'/data/project/persons/person[1]','psn_code',xmltype('<tel>111</tel>')).getClobVal() where e.zh_title='白夜追逐繁星';
三.修改(Update)
-- updatexml用于更新节点值
-- updatexml用于更新节点值,参数1:需要修改节点的xml字段;参数2:节点路径;参数3:值
update project e set e.prj_xml=updatexml(xmltype(e.prj_xml),'/data/project/persons/person[1]/tel','<tel>111</tel>').getClobVal() where e.zh_title='白夜追逐繁星';
update project e set e.prj_xml=updatexml(xmltype(e.prj_xml),'/data/project/persons/person[1]/tel/text()','').getClobVal() where e.zh_title='白夜追逐繁星';
tip: getClobVal()是将xmltype类型转成clob类型方法
四.删除(Delete)
-- 删除xml节点,参数1:需要删除节点的xml字段;参数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的增删改查操作
tip: xmltype函数是将clob字段转成xmltype类型的函数,若字段本身为xmltype类型则不需要引用xmltype()函数 同名标签用数组取值的方式获取,但起始值从1开始 一.查询(Q ...
- c# xml的增删改查操作 xmlDocument 的用法
1.将xml转换为DataTable string path = "";//xml的位置StringReader sr = null;XmlTextReader xmlReader ...
- 使用C#对XML进行增删改查操作
xml文件格式 <?xml version="1.0" encoding="utf-8"?> <messageList> <mes ...
- 对oracle里面clob字段里面xml的增删改查学习
这段时间,我使用系统表里面有clob字段里面存放的xml信息,我们如何对xml进行增删改查操作呢,自己参考了很多也学到很多,给大家分享一下 首先我们先建测试表 CREATE TABLE EFGP_23 ...
- 用dom4j解析xml文件并执行增删改查操作
转自:https://www.aliyun.com/jiaocheng/1339446.html xml文件: <?xml version="1.0" encoding=&q ...
- MyBatis批量增删改查操作
前文我们介绍了MyBatis基本的增删该查操作,本文介绍批量的增删改查操作.前文地址:http://blog.csdn.net/mahoking/article/details/43673741 ...
- 05_Elasticsearch 单模式下API的增删改查操作
05_Elasticsearch 单模式下API的增删改查操作 安装marvel 插件: zjtest7-redis:/usr/local/elasticsearch-2.3.4# bin/plugi ...
- oracle 临时表空间的增删改查
oracle 临时表空间的增删改查 oracle 临时表空间的增删改查 1.查看临时表空间 (dba_temp_files视图)(v_$tempfile视图)select tablespace_nam ...
- java实现xml文件增删改查
java一次删除xml多个节点: 方案1.你直接改动了nodeList,这一般在做循环时是不同意直接这么做的. 你能够尝试在遍历一个list时,在循环体同一时候删除list里的内容,你会得到一个异常. ...
随机推荐
- libgdx学习记录10——Particle粒子
粒子对制作画面特效很有用,可以使用Particle Editor进行自行编辑粒子效果,跟图片一起生成.p粒子文件,然后导入到程序中使用. 本文所用的粒子效果是基于其自带的demo的. 实例: pack ...
- idea java方法中 传多个参数对象 的复制粘贴快速处理方法
比如像这种的传多个参数对象,我是直接复制过来,然后把第一个字母改成大写,然后后面的实例对象敲一个第一个字符的小写,回车就直接出来了 在写调用参数的地方,ctrl+p 调出提示,然后按下提示里的实例的第 ...
- 设计模式 笔记 策略模式 Strategy
//---------------------------15/04/28---------------------------- //Strategy 策略模式----对象行为型模式 /* 1:意图 ...
- [Latex] 所有字体embedded: Type3 PDF文档处理 / True Type转换为Type 1
目录: [正文] Adobe Acrobat打印解决字体嵌入问题 [Appendix I] Type3转TRUE Type/Type 1 [Appendix II] TRUE Type转Type 1 ...
- JMeter采用NON GUI模式时如何记录并查看错误
在GUI模式下执行JMeter测试时,我们可以通过添加View Results Tree组件来查看JMeter请求的各类详情.那如果在正式测试场景中,当我们采用NON GUI模式时,遇到了断言或其他错 ...
- BugPhobia开发篇章:Beta阶段第I次Scrum Meeting
0x01 :Scrum Meeting基本摘要 Beta阶段第一次Scrum Meeting 敏捷开发起始时间 2015/12/10 00:00 A.M. 敏捷开发终止时间 2015/12/12 23 ...
- 实训三(cocos2dx 3.x 打包apk)
上一篇文章<实训二(cocos2dx 2.x 打包apk)>简单的讲述的利用cocos2dx 2.x引擎在windows平台上打包apk的方法与过程,本文将介绍3.x版本引擎,如何打包ap ...
- Hamburger
Bread: 我觉得舒婷解决问题的思路还是很不错的,对于java 的窗口框架也是很熟悉,打码速度也快了很多. Meat:但是我发现你在命名的时候会出现随意的现象,如果命名只有你自己看得懂的话,那么会增 ...
- Scapy安装以及简单使用
Scapy安装以及简单使用 参考文档 scapy官方文档 前言 scapy是一个可以模拟发送报文的python程序,使用了它从此发包不愁. 安装 1.首先得安装Python2.7 在linux系统 ...
- github优缺点
以前bitbucket沒有支援git github可以直接在網站上瀏覽push的圖片 github 可以針對code行數直接留言與回覆 github Markdown支援很好 github 的issu ...