订单问题处理模式
2015-05-01 11:39
183 查看
4月份,我要完成根据订单号去处理订单问题的脚步,但是总是不能很好的实现自动化处理,其中一个比较显著的问题是:ESS、IOM和资源 信息的交互,主要是通过大字段的xm。如果由于业务,或是营业操作不当,导致必须修改大字段才能过去的订单,我只能手动去修改大字段。于是,我一直在想,怎样去实现大字段的自动化处理,首先是要去获取大字段对应的节点,但是获取节点势必要频繁的使用截取和获取位置的函数,这样我的脚本会繁琐到我自己都看不懂。获取节点的脚本都是通用的,那么是不是可以存在这样的一个脚本呢。通过大字段、大字段的上级节点以及该节点出现的次数,去获取这个大字段内容的位置呢。系统中经常存在,节点中信息过长,导致无法解析到so系列表的数据,我是否可以通过获取两个节点的长度和所要解析到的列的容量去判断,是否该大字段已经超过我们能解析的范围了呢。是的,答案是可以的。
create or replace function rms_work.subXml(xml in clob, --要解析的xml subStr in varchar2, --节点名称 position in number) --出现次数 --根据xml和节点,获取节点的内容 --add by rwx 20151009 return clob is temp_position number; targetStr clob; end_substr varchar2(300); temp_subStr_position number; temp_end_substr_position number; begin if position is null or position = '' then temp_position := 1; else temp_position := position; end if; select substr(subStr, 1, 1) || '/' || substr(subStr, 2) into end_substr from dual; select instr(xml, subStr, 1, temp_position) + length(subStr) --第n个<subStr>中<的位置 + <subStr> 的长度,即第n个<subStr>的后一位 into temp_subStr_position from dual; select instr(xml, end_substr, 1, temp_position) - 1 --第n个</subStr>的位置-1, 即:第n个</subStr>的前一位 into temp_end_substr_position from dual; select substr(xml, temp_subStr_position, -- instr(xml, subStr, temp_position) + length(subStr), --第n个<subStr>中<的位置 + <subStr> 的长度,即第n个<subStr>的后一位 temp_end_substr_position -- (instr(xml, end_substr, temp_position) - 1) --第n个</subStr>的位置-1, 即:第n个</subStr>的前一位 - temp_subStr_position) -- - (instr(xml, subStr, temp_position) + length(subStr))) --第n个<subStr>中<的位置 - 1 + <subStr> 的长度,即第n个<subStr>的后一位 into targetStr from dual; return targetStr; end subXml;
create or replace function rms_work.subXml2(xml in clob, --要解析的xml subStr in varchar2, --节点名称 position in number) --出现次数 --根据xml和节点,获取节点的内容 返回带节点的内容信息 --add by renweixin 20151009 return clob is temp_position number; targetStr clob; end_substr varchar2(300); temp_subStr_position number; temp_end_substr_position number;begin if position is null or position = '' then temp_position := 1; else temp_position := position; end if; select substr(subStr, 1, 1) || '/' || substr(subStr, 2) into end_substr from dual; select instr(xml, subStr, 1, temp_position) - 1 --第n个<subStr>中<的位置 ,即第n个<subStr>的首位 into temp_subStr_position from dual; select instr(xml, end_substr, 1, temp_position) - 1 + length(end_substr) --第n个</subStr>的位置, 即:第n个</subStr>的末尾 into temp_end_substr_position from dual; select substr(xml, temp_subStr_position, temp_end_substr_position - temp_subStr_position + 1) into targetStr from dual; return targetStr;end subXml2;
相关文章推荐
- 设计模式-装饰者模式(问题比较大,需要重新处理)
- Java实现超市管理系统Class思维模式实现,空指针问题常见处理办法
- .net 高并发 多消费者模式处理订单
- this指向问题——严格、非严格模式,事件处理程序
- 在并发编程中使用生产者和消费者模式能够解决绝大多数并发问题。该模式通过平衡生产线程和消费线程的工作能力来提高程序的整体处理数据的速度。
- [负载均衡案例分享系列] 一个由负载均衡使用模式导致间断访问失败问题的处理
- USTC机试—字符串处理之模式匹配问题
- 处理问题的思维模式
- 单例模式,多线程同时访问一个实例对象问题的处理,加lock .
- 关于基于Event Sourcing模式实现的领域模型如何处理模型重构的问题的思考
- 系统用单例模式保存缓存的机制引用问题处理
- 处理单例设计模式中懒汉式的安全问题过程
- PHP设计模式系列 - 观察者模式处理订单(异步操作附加功能)
- lvs 路由模式下后端的realserver是windows该如何处理arp问题
- mysql主主模式无法启动日志同步进程问题处理
- IntelliJ IDEA处理.properties文件的乱码问题!附带简单工厂模式的源码
- JD订单去重的问题:谈分布式事务处理中领域驱动设计的原则
- MFC模式对话框与非模式对话框 消息处理顺序 与非模式对话框的焦点问题、显示、关闭以及交互问题
- chrome插件开发之:处理某些订单无法自动提交的问题
- unity 打开文件对话框功能及非Editor模式下全屏播放打开文件对话框后程序转后台问题的处理