您的位置:首页 > 其它

订单问题处理模式

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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐