Oracle中解析XMLType格式字段
背景:项⽬从某数据交换平台获取XML数据,以Oracle的XMLType格式保存在数据库字段中,需要建⽴触发器、存储过程,在保存数据时解析XML字段,将数据写⼊其他业务表中。
参考资料:Oracle的XMLType操作⽂档,地址为
oracle游标的使用要点总结:
(⼀)使⽤SQL语句操作XMLType格式字段的3个主要⽅法
(1)existsNode(XMLType实例,XPATH表达式)
1.功能:
需要⽤在where条件中,通过XPATH表达式在传⼊的XMLType实例中进⾏查询,如果实例中有符合表达式的节点,则函数返回1,否则返回0
2.使⽤⽅法:
select * from loginkcn_maritime_manifest where existsNode(xml,'/Root/Header/DocumentName')=1 a
nd
id='0272AB47DEDD450FBD06CA07463F245A';
函数中的"xml"为保存XMLType数据的字段名,id为普通varchar2字段,此时existsNode作为where条件的⼀项来使⽤,可以筛选出表中的记录
(2)extract(XMLType实例,XPATH表达式)
1.功能:
需要⽤在select之后,from之前,⽤于对查询出的XMLType字段的值进⾏进⼀步提取,从⽽获得新的XMLType格式的结果
2.使⽤⽅法:
select extract(xml,'/Root/Body/ContainerInfo') from loginkcn_maritime_manifest where
existsNode(xml,'/Root/Header/DocumentName')=1 and
id='0272AB47DEDD450FBD06CA07463F245A';
在通过existsNode()⽅法筛选出记录的基础上,通过extract⽅法提取出Root节点下,Body⼦节点中所有ContainerInfo节点的信息,作为⼀个新的XMLType类型的结果值
3.注意:
如果在存储过程中,可以传⼊⼀个XMLType的变量,此时只需要使⽤select extract('传⼊的XMLType变量','XPATH表达式') into '提取出的XMLType变量' from dual;的形式,来将传⼊的变量进⼀步进⾏提取并保存到新的变量中。
得到的新的XMLType结果可以应⽤到之后的进⼀步操作中。
(3)extractValue(XMLType实例,XPATH表达式)
1.功能:extractValue()⽅法和extract()⽅法类似,只不过得到数据类型的是节点的具体值,⽽不是XML节点类型,相当于
2.使⽤⽅法:
select extractValue(xml,'/Root/Body/ContainerInfo/ContainerNumber[1]') from loginkcn_maritime_manifest where
existsNode(xml,'/Root/Header/DocumentName')=1 and id='0272AB47DEDD450FBD06CA07463F245A';
3.注意:
此⽅法只能提取出单个节点的值,不能同时提取多个相同节点的值。
如果要⼀个节点中有多个重复的⼦节点,则需要通过XMLSquence转化先将XMLType数据转换为Table,然后才能以表的形式获取所有的⼦节点值,进⽽使⽤到游标循环等操作中(详细使⽤见下⽅)。
(⼆)对提取出的XML数据进⾏转换的2种⽅法
(1)XMLSequence(XMLType实例)
1.功能:
XMLSequence接收⼀个XMLType实例(可以⽤extract函数从数据库中导出并提取),按照实例中的顶层节点返回⼀个XMLType数组。配合Oracle的table()函数,可以将XMLType数组按照表的形式进⾏查询,然后可以进⾏count(*)、使⽤游标循环等操作。
2.使⽤⽅法:
select count(*) from table(XMLSequence(extract((select xml from loginkcn_maritime_manifest where
id='0272AB47DEDD450FBD06CA07463F245A'),'/Root/Body/ContainerInfo/ContainerNumber')));
3.注意:
XMLSequence需要和table()函数组合使⽤,效果和XMLTable类似
table函数的应⽤表函数可接受查询语句或游标作为输⼊参数,并可输出多⾏数据
(2)XMLTable('XPATH表达式' passing 所在表的XMLType列
columns 列名类型 path XPATH表达式)
1.功能
使⽤XMLTable可以⽅便的将XMLType字段转换为表格形式来进⾏下⼀步的操作
此函数将传⼊的XMLType列⽤XPATH表达式过滤后,按照columns定义的列规则,将节点和字段对应起来构成表格
2.使⽤⽅法:
select t.id,x.* from loginkcn_maritime_manifest t,xmltable(
'/Root/Body/ContainerInfo/ContainerNumber' l
columns container_number varchar2(30) path 'text()'
) x where t.id='0272AB47DEDD450FBD06CA07463F245A';
3.注意:
转换时要注意XML的格式要符合DTD标准
配合XPATH表达式可以实现更加复杂的筛选逻辑,如按照属性值进⾏筛选
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论