群组名称1;群组名称2;群组名称3;上面的字符串是作为存储过程的参数传入的,每次的群组数量是不固定的.请问:(1)如何求出字符串中分号的个数.
(2)如何获得每个分号前的内容.

解决方案 »

  1.   

    写个函数:...
    str            varchar2(1000);
    strTemp   varchar2(100); --每个分号前得字符串
    semi_num int; --分号个数
    pos           int;
    semi_num := 0;
    str := 你的字符串;
    pos := instr(str,';');
    while pos > 0
    loop
          strTemp := substr(str,1,pos-1);
          str := substr(str,pos+1);
          pos := instr(str,';');
          semi_num = semi_num + 1;
    end loop;
    ...
      

  2.   

    --这样的问题,好像问过多次了吧
    with tab as(
    select '群组名称1;群组名称2;群组名称3;'  id from dual
    )
    select substr(';'||id,instr(';'||id,';',1,level)+1,
              instr(';'||id,';',1,level+1)-instr(';'||id,';',1,level)-1) newid
    from tab
    connect by
    level <= length(';'||id) - length(replace(';'||id, ';', ''))-1
    --10g,用正则表达式简单些:
    with tab as(
    select '群组名称1;群组名称2;群组名称3;'  id from dual
    )
    select regexp_substr(id,'[^;]+',1,level) as newid
    from tab
    connect by
    level<=length(id)-length(replace(id,';',''))
      

  3.   

    楼上写的第一个在我的oracle9i中怎么执行不了啊.