各位:请问如何将“盐田区|龙岗区|宝安区|南山区|福田区|罗湖区”
求出上面字符串出现|的个数
并把各个区分开
结果如下
盐田
龙岗

拜谢

解决方案 »

  1.   

    Oracle10g,先写一个存储过程CREATE OR REPLACE procedure show_string_info(p_str VARCHAR2) AS
       l_tab      DBMS_UTILITY.uncl_array;
       l_tablen   NUMBER;
       l_list     VARCHAR2 (1000);
    BEGIN
       l_list := p_str;
       l_list := replace(p_str,'|',',');   DBMS_UTILITY.comma_to_table (l_list, l_tablen, l_tab);
       DBMS_OUTPUT.PUT_LINE(l_tablen);  for i in 1..l_tablen loop
        dbms_output.put_line(l_tab(i));
      end loop;END;
    /
    然后exec show_string_info('盐田区|龙岗区|宝安区|南山区|福田区|罗湖区')
      

  2.   

    写了个简单的,你可能要改改
    declare
      vStr varchar2(200);
      vStr1 varchar2(100);
    begin
      vStr := '盐田区|龙岗区|宝安区|南山区|福田区|罗湖区';
      if instr(vStr,'|',1)>0 then
      while instr(vStr,'|',1)>0 loop
      select substr(vStr,1,instr(vStr,'|',1)-1),
             substr(vStr,instr(vStr,'|',1)+1,length(vStr)-instr(vStr,'|',1)) into vStr1,vStr from dual;
      dbms_output.put_line(vStr1);
      end loop;
      dbms_output.put_line(vStr);
      else 
      dbms_output.put_line(vStr);
      end if;
    end;
      

  3.   

    写成存储过程了
    --iStr 输入的字符串,pStr 分隔符
    create or replace procedure P_ListStr(iStr varchar2,pStr varchar2)
    as
      vStr varchar2(1000);
      vStr1 varchar2(100);
    begin
      vStr := iStr;
      if instr(vStr,pStr,1)>0 then
      while instr(vStr,pStr,1)>0 loop
      select substr(vStr,1,instr(vStr,pStr,1)-1),
             substr(vStr,instr(vStr,pStr,1)+1,length(vStr)-instr(vStr,pStr,1)) into vStr1,vStr from dual;
      dbms_output.put_line(vStr1);
      end loop;
      dbms_output.put_line(vStr);
      else 
      dbms_output.put_line(vStr);
      end if;
    end;执行结果:
    zxf2@ORCL> exec p_listStr('盐田区|龙岗区|宝安区|南山区|福田区|罗湖区','|');
    盐田区
    龙岗区
    宝安区
    南山区
    福田区
    罗湖区PL/SQL 过程已成功完成。