方法我在网上已经搜索出来了,但是不知道咋调用到表中方法如下:
CREATE OR REPLACE TYPE ty_str_split IS TABLE OF VARCHAR2 (4000);
CREATE OR REPLACE FUNCTION fn_split (p_str IN VARCHAR2, p_delimiter IN VARCHAR2)
  RETURN ty_str_split
IS
  j INT := 0;
  i INT := 1;
  len INT := 0;
  len1 INT := 0;
  str VARCHAR2 (4000);
  str_split ty_str_split := ty_str_split ();
BEGIN
  len := LENGTH (p_str);
  len1 := LENGTH (p_delimiter);
  WHILE j < len
  LOOP
    j := INSTR (p_str, p_delimiter, i);
    IF j = 0
    THEN
        j := len;
        str := SUBSTR (p_str, i);
        str_split.EXTEND;
        str_split (str_split.COUNT) := str;
        IF i >= len
        THEN
          EXIT;
        END IF;
    ELSE
        str := SUBSTR (p_str, i, j - i);
        i := j + len1;
        str_split.EXTEND;
        str_split (str_split.COUNT) := str;
    END IF;
  END LOOP;
  RETURN str_split;
END fn_split;调用:
单独拆分一个字符
如:select  fn_split('a,b,c,aa,d',',')   from   dual 
执行结果是
a
b
c
aa
d但如果我是要拆分表A中的  d字段内容呢  A表有很多条记录。我该怎么用,求帮忙

解决方案 »

  1.   

    采用游标针对每一行调用fn_split
      

  2.   


    SQL> create table ta as
      2  select 'a,b,c,aa,d' chr from dual
      3  /
     
    Table created
     
    SQL> select * from ta;
     
    CHR
    ----------
    a,b,c,aa,dSQL> create table tb as
      2  select * from ta
      3  where 1=0
      4  /
     
    Table created
     
    SQL> select count(*) from tb;
     
      COUNT(*)
    ----------
             0
    SQL> insert into tb
      2  select regexp_substr(chr,'[^,]+',1,level) chr
      3  from ta
      4  connect by
      5          level <= length(chr)-
      6          length(replace(chr,',',''))+1
      7  /
     
    5 rows inserted
     
    SQL> select * from tb;
     
    CHR
    ----------
    a
    b
    c
    aa
    d
     
    SQL> 
      

  3.   

    我的'a,b,c,aa,d' 只是舉例   如果我要把這個內容 換成是表中的某個字段要怎麼辦
      

  4.   

    with tab as(
    select 'test' name,'a,b,c,aa,d' id from dual
    )
    select name,regexp_substr(id,'[^,]+',1,level) as newid
    from tab
    connect by
    level<=length(id)-length(replace(id,',',''))+1NAME NEWID
    ------------
    test  a 
    test  b 
    test  c 
    test  aa
    test  d