在存储过程中:
create or replace procedure proc_mobile_black_list(blackList in varchar2) is
begin
DECLARE
  A     VARCHAR2(1000);
  A_OUT VARCHAR(2000);
BEGIN
  A_OUT := '''';
  A:=blackList;  LOOP
    EXIT WHEN INSTR(A, ',') = 0;
    A_OUT := SUBSTR(A, 1, INSTR(A, ',') - 1);
    A     := SUBSTR(A, INSTR(A, ',') + 1);
    insert into a values (A_OUT);
  END LOOP;
END;
end proc_mobile_black_list; 存储过程的参数blackList 是类似   '1,2,3,4,5,6',我将它拆分为 1  2 3 4 5 6  循环查到tableName表name字段
name字段建立了不可重复的unique,
我现在的问题是,如果name里已经有一个 5的记录,循环的时候到这里就会抛ORA-00001: unique constraint (tableName.IDUNIQUE) violated, 怎么在出来这个异常之后继续循环,往下走,而不是停止?
谢谢

解决方案 »

  1.   

      LOOP 
        EXIT WHEN INSTR(A, ',') = 0; 
        A_OUT := SUBSTR(A, 1, INSTR(A, ',') - 1); 
        A    := SUBSTR(A, INSTR(A, ',') + 1); 
         begin
            insert into a values (A_OUT); 
         exception
            when others then
               null;
         end;
      END LOOP; 
      

  2.   

      LOOP 
        EXIT WHEN INSTR(A, ',') = 0; 
        A_OUT := SUBSTR(A, 1, INSTR(A, ',') - 1); 
        A    := SUBSTR(A, INSTR(A, ',') + 1); 
      begin
        insert into a values (A_OUT); 
      exception
      when others then
      null;
      end;

      END LOOP; 
      

  3.   

     LOOP 
        EXIT WHEN INSTR(A, ',') = 0; 
        A_OUT := SUBSTR(A, 1, INSTR(A, ',') - 1); 
        A    := SUBSTR(A, INSTR(A, ',') + 1); 
      begin 
        insert into a values (A_OUT); 
      exception 
      when others then 
      null; 
      end; 
      END LOOP;
      

  4.   

    。我慢了58秒,准复读了一次``
    学习的话起码也要自己一个一个敲击键盘输入吧,ctrl+C-->ctrl+V就没什么意思了