现在有一张表
设备属地 设备名称 设备IP 结果
北京 和丰中心局ME60(是一个字段) 222.83.19.109 CR56LPUF400A,210305498910J7000268,03054989;CR56LPUF100B0,210305377710H3000190,03053777;CR56LPUF100B0,210305377710G1000861,03053777(这是一个字段)
上海 80局华为NE80E (是一个字段) 222.83.19.158 CR52EAGF0,0386751073000124,PIC;CR52EAGF,0278671073000167,LPU;CR52EAGF0,0386751068000350,PIC;CR52EAGF,0278671067000055,LPU;CR52SRUA0,0391091073000356,MPU;CR52SRUA0,0391091073000342,SFU
...... ......... ........... ........
其中结果这个字段很长,我只是截取了部分粘贴的,现在要将结果这个字段进行拆分,第一次拆成:
CR56LPUF400A,210305498910J7000268,03054989
CR56LPUF100B0,210305377710H3000190,03053777
CR56LPUF100B0,210305377710G1000861,03053777
第二次拆分
CR56LPUF400A 210305498910J7000268 03054989
CR56LPUF100B0 210305377710H3000190 03053777
CR56LPUF100B0 210305377710G1000861 03053777
然后将拆分的字段存到另外的一张表中表,如下
设备属地 设备名称 设备IP 单板类型 单板编码 单板描述
北京 (和丰中心局ME60)一个字段 222.83.19.109 CR56LPUF400A 210305498910J7000268 03054989
北京 和丰中心局ME60 222.83.19.109 CR56LPUF100B0 210305377710H3000190 03053777
北京 和丰中心局ME60 222.83.19.109 CR56LPUF100B0 210305377710G1000861 03053777
上海 (80局华为NE80E) 222.83.19.158 CR52EAGF0 0386751073000124 PIC
上海 80局华为NE80E 222.83.19.158 ... ... ...
... ... ... ... ... ...
现在需要使用oracle存储过程来实现,本人初学,不知道怎么做,麻烦哪位大佬给指点下,在线等,谢谢
设备属地 设备名称 设备IP 结果
北京 和丰中心局ME60(是一个字段) 222.83.19.109 CR56LPUF400A,210305498910J7000268,03054989;CR56LPUF100B0,210305377710H3000190,03053777;CR56LPUF100B0,210305377710G1000861,03053777(这是一个字段)
上海 80局华为NE80E (是一个字段) 222.83.19.158 CR52EAGF0,0386751073000124,PIC;CR52EAGF,0278671073000167,LPU;CR52EAGF0,0386751068000350,PIC;CR52EAGF,0278671067000055,LPU;CR52SRUA0,0391091073000356,MPU;CR52SRUA0,0391091073000342,SFU
...... ......... ........... ........
其中结果这个字段很长,我只是截取了部分粘贴的,现在要将结果这个字段进行拆分,第一次拆成:
CR56LPUF400A,210305498910J7000268,03054989
CR56LPUF100B0,210305377710H3000190,03053777
CR56LPUF100B0,210305377710G1000861,03053777
第二次拆分
CR56LPUF400A 210305498910J7000268 03054989
CR56LPUF100B0 210305377710H3000190 03053777
CR56LPUF100B0 210305377710G1000861 03053777
然后将拆分的字段存到另外的一张表中表,如下
设备属地 设备名称 设备IP 单板类型 单板编码 单板描述
北京 (和丰中心局ME60)一个字段 222.83.19.109 CR56LPUF400A 210305498910J7000268 03054989
北京 和丰中心局ME60 222.83.19.109 CR56LPUF100B0 210305377710H3000190 03053777
北京 和丰中心局ME60 222.83.19.109 CR56LPUF100B0 210305377710G1000861 03053777
上海 (80局华为NE80E) 222.83.19.158 CR52EAGF0 0386751073000124 PIC
上海 80局华为NE80E 222.83.19.158 ... ... ...
... ... ... ... ... ...
现在需要使用oracle存储过程来实现,本人初学,不知道怎么做,麻烦哪位大佬给指点下,在线等,谢谢
拆分可以用connect by配合REGEXP_SUBSTR ,很麻烦
似乎还有其它一些奇技淫巧
这种事情我建议别放在存储过程里做,即难写又难维护
用个外部脚本,难度就降低很多,维护起来也容易
FROM dual
CONNECT BY regexp_substr('CR56LPUF400A,210305498910J7000268,03054989;CR56LPUF100B0,210305377710H3000190,03053777;CR56LPUF100B0,210305377710G1000861,03053777', '[^;,]+', 1, LEVEL) IS NOT NULL
create or replace function split(p_str varchar2,p_delimiter varchar2 default ',') return type_stris rs type_str:=type_str(); l_str varchar2(4000):=''; l_len number:=0;begin l_str:=p_str; l_len:=length(p_delimiter); while length(l_str)>0 loop if instr(l_str,p_delimiter)>0 then rs.extend; rs(rs.count):=substr(l_str,1,instr(l_str,p_delimiter)-1); l_str:=substr(l_str,instr(l_str,p_delimiter)+l_len); else rs.extend; rs(rs.count):=l_str; exit; end if; end loop; return rs;end;
FROM dual
CONNECT BY level<=regexp_count(column,'(;|,)]')+1
此处的(;|,) 不知是否可行,楼主可以用两次正则替换