我有一张表a的记录如下(DEPART_ID是varchar2型):
DEPART_ID     Num         
-----------     -------
 ;88;10;           3        
 ;A_1;88;4;        1         
 ;A_2;4;89;  5  
 ... ...          ...
 
能否通过view,procedure,type或其他的方法从表a得到下面的这些数据形式(根据DEPART_ID中的;来拆分):
DEPART_ID     Num         
-----------     -------
 88                  3        
 10    3
 A_1    1
 88    1
 4    1
 A_2    5
 4    5
 89    5  
... ...             ...
该如何实现比较好?不管用什么方法都行啊!

解决方案 »

  1.   

    可以用plsql实现,不过很繁
    用instr加上substr函数就可以拆分了
      

  2.   

    to:ern(学习Oracle) 
        你好,能具体点吗?
      

  3.   

    用游表循环取出数据
    对于每一行数据进行处理
    instr(str,';',1) 返回 字符串中';'第一次出现的位置
    substr(str,2,3)  从第二位开始截取str后面的三个字符
      

  4.   

    create or replace type mytabletype as table of number;
    /create or replace function strtab(p_str in varchar2)
    return mytabletype
    as
    lstr varchar2(1000) default p_str||',';
    ln   number;
    ldata   mytabletype:=mytabletype();
    begin
    loop
      ln:=instr(lstr,',');
      exit when (nvl(ln,0)=0);
      ldata.extend;
      ldata(ldata.count):=ltrim(rtrim(substr(lstr,1,ln-1)));
      lstr:=substr(lstr,ln+1);
    end loop;
    return ldata;
    end;
    /SQL> select * from table(cast(strtab('11,12,13') as mytabletype));COLUMN_VALUE
    ------------
              11
              12
              13SQL> create table bb(id varchar2(2),name varchar2(10));Table createdSQL> insert into bb values('11','张三');1 row insertedSQL> insert into bb values('12','李四');1 row insertedSQL> insert into bb values('13','王五');1 row insertedSQL> select * from bb where id in (select * from table(cast(strtab('11,12,13') as mytabletype)));ID NAME
    -- ----------
    11 张三
    12 李四
    13 王五