我现在在oracle中写了一个触发器,其中有一个变量需要把它拆开,然后分别做比较比如:"aaa,bbb,wasd,cdes"这样一个字符串。还有一个值,要和其中的每一段做比较(以","分割)该怎么循环比较?大侠们,帮帮忙,急!!!

解决方案 »

  1.   

    for i =1 to length(字符串)
       if substr(字符串,i,1)=',' then
          抓值!
       end if
    loop
      

  2.   

    不需要分离,用instr函数,注意字段名和参数两边都加上',',否则查询出来有问题
    select * from 
    (
    select 'aaa,bbb,wasd,cdes' as name from dual
    ) a
    where instr(','||name||',',','||'aaa'||',')>0
      

  3.   

    declare
        l_pos1 number := 1;
        l_pos2 number := 1;
        l_str  varchar2(100) := 'aaa,bbb,wasd,cdes';
        l_buff varchar2(30);
    begin
        while l_pos1 < length(l_str) loop
            l_pos2 := instr(l_str, ',', l_pos1, 1);
            if l_pos2 = 0 then
                dbms_output.put_line(substr(l_str,
                                            l_pos1,
                                            length(l_str) - l_pos1 + 1));
                exit;
            end if;
            l_buff := substr(l_str, l_pos1, l_pos2 - l_pos1);
            dbms_output.put_line(l_buff);
            l_pos1 := l_pos2 + 1;
        end loop;
    end;一个注意点,如果你改写成方法的话,那么一定要先判断传入的字符串是否是否为空,或者不符合条件
      

  4.   


    如果也要判断bbb    wasd,cdes 不是INSTR都有一个一个去执行,那如果传入的字符不定长,那就麻烦了!不建议用楼上的方法!我的思路和majy一样! 因为这个处理不定长的字符串传入!
      

  5.   

    创建基于JAVA的函数或者过程,然后在过程中使用这个新定义过程。
    上面几楼说的,都是只能适应简单情况,如果字符稍微比较多一些的话,可能就有点问题。
    而在java中只用开源的,则能够很容易导出需要的内容.
      

  6.   

    有三种方法。参见
    http://blog.csdn.net/hhuck/archive/2008/10/27/3160450.aspx