MySQL自带extractvalue解析XML,MySQL存储过程、游标
2017-12-28 13:59
861 查看
表结构如下:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202008/24/13929f951a86dcdb06253ccc521a9699)
要求把每个xml消息中的某个字段取出来。
方法一:把所有的xml消息导出用Java或Python解析;
方法二:用MySQl的extractvalue解析,也正是所要讲的
首先看看解析一条XML消息是怎么样的,在navicat中执行下面的SQL
有关于extractvalue详细的使用方法见此链接extractvalue官方说明
执行结果:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202008/24/88b3ff5dc52dd9cf32af824c6f2a56cf)
现在要做的就是依次取出数据表里的每条xml消息都放到上面的SQL语句中执行,再把执行结果放到一张临时表就能可以了。怎么做呢?因为之前学Oracle时接触过一段时间的存储过程、函数、游标,所以自然就就想到了这些。上网查了半天发现MySQL写这些东西跟Oracle大体相同。
然后,就可以从表里取出想要的数据了。
还有一个问题是,如果我想要得到一个xml标签下所有的子标签及其内容,比如:
我想要META标签下所有的内容,好像还不能办到.
官方文档是这样写的:
ExtractValue() returns only CDATA, and does not return any tags that might be contained within a matching tag, nor any of their content .
一些东西,虽然学过,但是后来不怎么用就慢慢的忘记了。
要求把每个xml消息中的某个字段取出来。
方法一:把所有的xml消息导出用Java或Python解析;
方法二:用MySQl的extractvalue解析,也正是所要讲的
首先看看解析一条XML消息是怎么样的,在navicat中执行下面的SQL
SET @temp_xml = ' <?xml version="1.0" encoding="UTF-8"?> <MSG xmlns="http://www.travelsky.com/2006/dcsi" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <META> <SNDR>AODB</SNDR> <SEQN>800495</SEQN> <DTTM>20171226114530</DTTM> <TYPE>FLOP</TYPE> <STYP>STND</STYP> </META> <FLOP> <FLID>4666481</FLID> <STND>Y20</STND> </FLOP> </MSG> '; select extractvalue(@temp_xml,'/MSG/FLOP/STND') res1
有关于extractvalue详细的使用方法见此链接extractvalue官方说明
执行结果:
现在要做的就是依次取出数据表里的每条xml消息都放到上面的SQL语句中执行,再把执行结果放到一张临时表就能可以了。怎么做呢?因为之前学Oracle时接触过一段时间的存储过程、函数、游标,所以自然就就想到了这些。上网查了半天发现MySQL写这些东西跟Oracle大体相同。
BEGIN #Routine body goes here... #定义变量 DECLARE done INT DEFAULT -1; DECLARE content LONGTEXT; #声明游标 DECLARE cur1 CURSOR FOR SELECT t.ORIGINALCONTENT from audit t; #结束标志 DECLARE CONTINUE HANDLER FOR NOT found SET done = 1; OPEN cur1; myLoop: LOOP FETCH cur1 INTO content; IF done = 1 THEN LEAVE myLoop; END IF; SET @temp_xml = content; #把解析结果插入临时表 INSERT INTO res (RESULT1) select extractvalue(@temp_xml,'/MSG/FLOP/STND'); END LOOP myLoop; select * from res; CLOSE cur1; END
然后,就可以从表里取出想要的数据了。
还有一个问题是,如果我想要得到一个xml标签下所有的子标签及其内容,比如:
<META> <SNDR>AODB</SNDR> <SEQN>800495</SEQN> <DTTM>20171226114530</DTTM> <TYPE>FLOP</TYPE> <STYP>STND</STYP> </META>
我想要META标签下所有的内容,好像还不能办到.
官方文档是这样写的:
ExtractValue() returns only CDATA, and does not return any tags that might be contained within a matching tag, nor any of their content .
一些东西,虽然学过,但是后来不怎么用就慢慢的忘记了。
相关文章推荐
- Oracle中通过游标执行带参数的存储过程实现解析CLOB字段内的xml字符串:
- MySQL 5.0 存储过程例子(使用了游标)
- mysql视图,存储过程,游标,触发器,事务简单了解
- mysql 存储过程、触发器、视图、游标、分布式事务-之存储过程
- MySQL存储过程_游标
- MySQL存储过程、函数和游标
- MFC使用自带的MSXML6.dll解析xml(开发环境vc2010)
- mysql 存储过程,游标和错误提示
- Mysql创建存储过程,使用游标Cursor循环更新
- MySQL存储过程-->通过游标遍历和异常处理迁移数据到历史表
- mysql语句:索引,游标,存储过程,视图,分区,分库分表,数据库集群,数据库负载均衡
- mysql之——存储过程 + 游标 + 事务
- iOS-系统自带xml解析(自定义封装)
- MySQL 存储过程/游标/触发器/事务
- mysql 存储过程 游标的使用 与定义
- mysql复合语句、存储过程、游标
- MySQL实战系列3:视图、存储过程、函数、索引全解析
- MYSQL存储过程 游标 循环等
- mysql动态游标学习(mysql存储过程游标)
- Mysql常用命令、简单查询、游标、存储过程、触发器简单介绍