分享最近和同事处理的 解析XML的相关问题
CREATE OR REPLACE PROCEDURE BATCHINSERTSK_DEVICE_RECORD1
(
xmlstr IN clob,
v_commits out number,
p_rows Out Sys_Refcursor
)
AS
iscz number;
zqcomit number;
pchsc varchar2(50);
BEGIN
savepoint sp01; --设置回退点
v_commits:=0; --v_counts初始值 0
--生成批次号,用于记录请求的唯一标识
select to_char(systimestamp,'yyyymmddhh24missff3') into pchsc from dual;
-- 循环解析后的xml数据,逐条验证是否重复
for xsk in (select * from ( SELECT
EXTRACTVALUE(VALUE(t),'/u/i') i --recover_uuid
,EXTRACTVALUE(VALUE(t),'/u/t') t --register_unit_uuid
,EXTRACTVALUE(VALUE(t),'/u/l') l --device_type
,EXTRACTVALUE(VALUE(t),'/u/b') b --device_id
,EXTRACTVALUE(VALUE(t),'/u/n') n --nsrsbh
,EXTRACTVALUE(VALUE(t),'/u/m') m --nsrmc
,EXTRACTVALUE(VALUE(t),'/u/h') h --recover_people
,to_date(EXTRACTVALUE(VALUE(t),'/u/r'),'yyyy/MM/dd') r --recover_date
,EXTRACTVALUE(VALUE(t),'/u/y') y --recover_reason
,EXTRACTVALUE(VALUE(t),'/u/p') p --recover_remark
,EXTRACTVALUE(VALUE(t),'/u/s') s --status
,EXTRACTVALUE(VALUE(t),'/u/ot') ot --hold_unit
,EXTRACTVALUE(VALUE(t),'/u/ht') ht --history_hold_unit
,EXTRACTVALUE(VALUE(t),'/u/e') e -- register_people
FROM TABLE(XMLSEQUENCE(EXTRACT(
XMLTYPE(xmlstr), '/d/u')))
t) xat )
loop
--从正式表中遍历插入的数据,取出和 解析xml后的结果集的重复数据 。取出符合条件的数据条数 赋值变量 iscz
select count(1) into iscz from sk_device_recover_tmp sk where sk.device_type=xsk.l and sk.device_id=xsk.b;
if iscz=0 then --如果数据为0,没有重复数据。那么插入正式表
insert into
sk_device_recover_tmp r (
r.recover_uuid,
r.register_unit_uuid,
r.device_type,
r.device_id,
r.nsrsbh,
r.nsrmc,
r.recover_people,
r.recover_date,
r.recover_reason,
r.recover_remark,
r.status,
r.hold_unit,
r.history_hold_unit,
r.register_people
)
values (xsk.i,xsk.t,xsk.l,xsk.b,xsk.n,xsk.m,xsk.h,xsk.r,xsk.y,xsk.p,xsk.s,xsk.ot,xsk.ht,xsk.e) ;
v_commits:=v_commits+1; --v_commits依次加1
zqcomit:=zqcomit+1; --zqcomit依次加1
dbms_output.put_line(zqcomit);
if mod(zqcomit,100)=0 then --分批提交
commit;
end if;
else
--把重复的数据先放到表中临时存储,使用批次号标记
insert into admin_work_area_tmp values(xsk.l,xsk.b,pchsc);
end if;
end loop;
--返回xml中和数据库中重复的数据,使用批次号查询
open p_rows for select * from admin_work_area_tmp where pch=pchsc;
--删除当前批次号的数据
delete admin_work_area_tmp where pch=pchsc;
commit;
v_commits:=v_commits+1;
--异常处理
exception
when others then
v_commits:=0;
dbms_output.put_line(sqlcode||sqlerrm);
rollback to savepoint sp01;
--xml字符串 示例 <d><u><i>123456654321555</i><t>caee3254e0e84384a24067ea510cfa74</t><l>1</l><b>2534556654321</b><n>123456</n><m>纳税人</m><h>回收人</h><r>2015/09/28</r><y>1</y><p>wqerqwr</p><s>1</s><ot>57106214a6f048989aa38a5fd80c7ba3</ot><ht>57106214a6f048989aa38a5fd80c7ba3</ht><e>1130000001</e></u></d>
end;
/
创建 中转表 正式表
create table SK_DEVICE_RECOVER_tmp
(
recover_uuid VARCHAR2(32) not null,
register_unit_uuid VARCHAR2(32),
device_type CHAR(1),
device_id VARCHAR2(20),
nsrsbh VARCHAR2(40),
nsrmc VARCHAR2(200),
recover_people VARCHAR2(200),
recover_date DATE,
recover_reason CHAR(1),
recover_remark VARCHAR2(200),
status CHAR(1),
hold_unit VARCHAR2(32),
history_hold_unit VARCHAR2(300),
register_date DATE default sysdate,
is_error CHAR(1) default 0,
stock_label CHAR(1) default 'N',
pre_status CHAR(1),
register_people VARCHAR2(100)
)
create table ADMIN_WORK_AREA_tmp
(
l NUMBER,
b VARCHAR2(50),
pch VARCHAR2(50)
)
tablespace USERS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64
next 1
minextents 1
maxextents unlimited
);
分享最近和同事处理的 解析XML的相关问题的更多相关文章
- 分享一个解析XML成为php数组的方法
原文:分享一个解析XML成为php数组的方法 <?php /* * To change this template, choose Tools | Templates * and open th ...
- POPTEST老李分享DOM解析XML之java
POPTEST老李分享DOM解析XML之java Java提供了两种XML解析器:树型解释器DOM(Document Object Model,文档对象模型),和流机制解析器SAX(Simple ...
- 关于dom4j解析XML的问题分享
最近在在做个程序需要将C#小工具转成java,因为需要涉及到操作xml文件所以需要引用dom4j: 使用dom4j解析XML时,要快速获取某个节点的数据,使用XPath是个不错的方法,dom4j的快速 ...
- 解析xml并且导入mysql
https://www.zhihu.com/question/28139319 解析超过500G的xml 写入mysql,如何尽快写入? 解析超过500G的xml 写入mysql,如何尽快写入? 现在 ...
- java解析XML文件
dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个非常非常优秀的Java XML API,具有性能优异.功能强大和极端易用使用的特点,同时它也是一个开放源 ...
- ACEXML解析XML文件——我是如何学习并在短时间内掌握一个库的使用方法的
最近做的C++项目中需要使用xml文件保存一些信息,程序启动时会读取这些信息.最终经过主程的评测,决定使用ACEXML库来读取解析XML文件. 好吧,至于为什么选择ACEXML库,我就不说了.既然选择 ...
- 【Android学习笔记】XmlResourceParser解析xml文件
最近学习Android时,需要用到解析XML文件里的数据,可以用XmlResourceParser来解析xml文件,正好将此记录下来. XmlResourceParser里常用的字段和方法 首先先给出 ...
- python 解析XML python模块xml.dom解析xml实例代码
分享下python中使用模块xml.dom解析xml文件的实例代码,学习下python解析xml文件的方法. 原文转自:http://www.jbxue.com/article/16587.html ...
- 【iOS-cocos2d-X 游戏开发之九】Cocos2dx利用CCSAXParser解析xml数据&CCMutableDictionary使用与注意!
本站文章均为李华明Himi原创,转载务必在明显处注明:转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/iphone-cocos2dx/694.html ☞ ...
随机推荐
- Win10开发必备:Visual Studio 2015正式版下载
7月21日凌晨消息,面向大众用户的Visual Studio 2015集成开发工具正式版免费试用版已经推出.本文帮大家汇总一下简体中文社区版.专业版以及企业版在线安装版以及ISO离线安装镜像下载地址. ...
- Delphi安装/卸载OCX控件的方法
delphi 安装卸载ocx 请参见 如下 http://blog.csdn.net/xt_chaoji/article/details/7027298 打开Delphi,关闭所有项目. 1. ...
- 【转】[WCF REST] 帮助页面与自动消息格式(JSON/XML)选择
可以说WebHttpBinding和WebHttpBehavior是整个Web HTTP编程模型最为核心的两个类型,前者主要解决消息编码问题,而余下的工作基本上落在了终结点行为WebHttpBehav ...
- Linux学习笔记13——使用curses函数库
一 安装curses库 如果你的Linux系统中curses库,直接敲入命令sudo apt-get install libncurses5-dev,然后就会自动安装curses库,安装好之后敲入命令 ...
- 【转】关于 Endnote 与 Word 卡死问题 标记语法错误
转自:http://hi.baidu.com/lvneng/item/8147dcbb1436bfd085dd7962 当使用 Word 写论文或稿件时,Endnote 绝对是一个不错的帮手,不过偶尔 ...
- m版页面判断安卓与ios系统
安卓系统和ios系统,在做app里面嵌入m版时,有时候会发现,ios上面的那个电池状态栏不占位置,但是安卓的状态栏占位,所以需要区分系统样式单独处理一下! var sUserAgent=navigat ...
- C#多线程(下) 分类: C# 线程 2015-03-09 10:41 153人阅读 评论(0) 收藏
四.多线程的自动管理(线程池) 在多线程的程序中,经常会出现两种情况: 一种情况: 应用程序中,线程把大部分的时间花费在等待状态,等待某个事件发生,然后才能给予响应 这一般使用ThreadPool(线 ...
- winfrom 操作 INI 文件 分类: WinForm 2014-07-22 12:49 156人阅读 评论(0) 收藏
<strong><span style="font-size:18px;">(1)INI文件的名称:FileConfig.ini</span>& ...
- Android自己定义控件而且使其能够在xml中自己定义属性
为什么要自己定义View android开发中自己定义View的优点是显而易见的.比方说以下的这个顶部导航,它被设计出如今应用的每一个界面,但每次的内容却不尽同样.我们不能在每一个layout资源中都 ...
- ReentrantLock与synchronized的差别
总的来说,lock更加灵活. 主要同样点:Lock能完毕synchronized所实现的全部功能 不同: 1.ReentrantLock功能性方面更全面,比方时间锁等候,可中断锁等候,锁投票等,因此更 ...