在存储过程中:
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, 怎么在出来这个异常之后继续循环,往下走,而不是停止?
谢谢
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, 怎么在出来这个异常之后继续循环,往下走,而不是停止?
谢谢
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;
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;
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;
学习的话起码也要自己一个一个敲击键盘输入吧,ctrl+C-->ctrl+V就没什么意思了