오라클 exception 처리 시 질문 있습니다. 0 2 2,838

by 도가니 exception [2016.05.23 10:10:29]


안녕하세요, 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 할 수 있을까요?

엔지니어분들의 고견 부탁 드립니다.

by 마농 [2016.05.23 11:17:59]

한방 쿼리(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


by 도가니 [2016.05.23 11:29:00]

마농님 답변 감사드립니다.

DML Error Logging보단 커서를 사용하는게 효율적인것 같네요.

감사합니다, 좋은 하루 되세요~

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입