用oracle把表中某字段内以“|”分割的数据添加到另一表中不同的字段中

用户消费属性 分类类型1选择、2不选择 存储模式[选择]>1级消费类型名称>2级消费类型名称>3级消费类型名称>范围1>范围2||[不选]>1级消费类型名称>2级消费类型名称>3级消费类型名称>范围1>范围2
如何用oracle把 这些是放在一个表的User_fee_Prope中的以“>”为小分割,以“||”为大分割,如何才能用oracle语句把把它插入到另个表的不同字段中?
就是建个表A 就一列User_fee_Prope Varchar2(200) 把“存储模式[选择]>1级消费类型名称>2级消费类型名称>3级消费类型名称>范围1>范围2||[不选]>1级消费类型名称>2级消费类型名称>3级消费类型名称>范围1>范围2 ” 放入User_fee_Prope中 再建个表B 列可随便起,把A中内容以“>”为分割插入 B表 不同列中 且“||”为换行分割 最终B表形式如下:
存储模式[选择]>1级消费类型名称>2级消费类型名称>3级消费类型名称>范围1>范围2||
[不选]>1级消费类型名称>2级消费类型名称>3级消费类型名称>范围1>范围2

这个不难,写个过程就可以了。
用到substr()方法。。
自己研究一下吧!

----补充----
把详细的需求说出来,具体要插进那个表?那些字段
等下有空帮你写!

--+++++++++ORACLE下 测试通过++++++++++--
--1. 初始化表
create table tableA(
User_fee_Prope varchar2(2000));
insert into tableA values ('存储模式[选择]>1级消费类型名称>2级消费类型名称>3级消费类型名称>范围1>范围2||[不选]>1级消费类型名称>2级消费类型名称>3级消费类型名称>范围1>范围2');
insert into tableA values ('存储模式[选择]>4级消费类型名称>5级消费类型名称>6级消费类型名称>范围3>范围4||[不选]>4级消费类型名称>5级消费类型名称>6级消费类型名称>范围3>范围4');
commit;

create table tableB(
column1 varchar2(200),
column2 varchar2(200),
column3 varchar2(200),
column4 varchar2(200),
column5 varchar2(200),
column6 varchar2(200));

--2. 创建function
create or replace type tabs as table of varchar2(200);
create or replace function splitStr(spStr varchar2, splitor varchar2) return tabs
is
tab tabs := tabs();
pos number;
str varchar(2000);
begin
str := rtrim(ltrim(spStr),splitor);
if spStr is null then return null; end if;
if splitor is null then return null; end if;
loop
pos:=instr(str,splitor);
exit when pos=0 or pos is null;
tab.extend;
tab(tab.last):=substr(str,1,pos-1);
str := rtrim(ltrim(substr(str,pos+1,length(str)),splitor),splitor);
end loop;
if pos=0 or pos is null then
tab.extend;
tab(tab.last):=str;
end if;
return tab;
end;
/
--3.
declare
t1 tabs;
t2 tabs;
begin
for a in (select User_fee_Prope from tableA) loop
t1 := splitStr(a.User_fee_Prope,'||');
for r in t1.first..t1.count loop
t2 := splitStr(t1(r),'>');
insert into tableB values(t2(1),t2(2),t2(3),t2(4),t2(5),t2(6));
end loop;
end loop;
commit;
end;
温馨提示:答案为网友推荐,仅供参考