안녕하세요, exception 처리 시 궁금한 점이 있어
검색을 해봐도 답을 못 찾아 이렇게 도움을 청합니다.
begin
insert into temp1 select * from temp2;
exception when others then
insert into temp1_errt values();
end;
위 쿼리처럼 사용하였을때 temp2테이블의 데이터가 temp1 에 이미 등록되어 있어
DUP_VAL_ON_INDEX 가 발생되면 그 row를 temp1_errt 테이블에 insert 하려고 합니다.
values() 안에 어떻게 사용해야 키중복이 나는 데이터를 insert 할 수 있을까요?
엔지니어분들의 고견 부탁 드립니다.
한방 쿼리(Insert ~ Select)로 입력하면
여러 건의 데이터중 어떤 건이 에러나는지 알 수 없죠.
Select 커서를 Loop 돌려가면서 한건씩 입력해야죠.
BEGIN FOR c IN (SELECT * FROM temp2) LOOP BEGIN INSERT INTO temp1 VALUES(c.c1, c.c2, ...); EXCEPTION WHEN DUP_VAL_ON_INDEX THEN INSERT INTO temp1_errt VALUES(c.c1, c.c2, ...); END; END LOOP; END;
10G R2 의 새기능 DML Error Logging 기능을 활용할 수도 있겠네요.
http://extremedb.blogspot.kr/2008/02/dml-error-logging.html