database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 40226 게시물 읽기
No. 40226
oracle insert 에러 무시할려면...
작성자
서응주(gccadm)
작성일
2013-08-19 17:13
조회수
7,700

안녕하세요.

oracle  프로시져를 작성하고 있는데

input데이타가 원체 불안정 합니다.

날짜 형식이 안맞는녀석, 꼭 필요한 필드인데 null인 녀석 등 

에러의 종류도 하두 다양해서 열거하기도 힘들 정도입니다.

 

하나 해결하면 다른게 exeception 에 걸리고 또 해결하면 다른 exeception에 걸리고

그런데 데이타 건수는 무지막지 해서 1억건 정도 됩니다.

질문 :  insert시 오류 발생시  특정 db에 키값만 insert하고  나머지 데이타들은 계속 처리를 하고 싶습니다.

현재 cursor를 정의 하고 open , fetch를 하고 있는데

어떻게 해야 insert 도중에 에러를 만나도 중단되지않고 끝까지 돌수 있을까요 ?

 

ㅠㅠ    오늘 집에 못가게 생겼어요... 흑흑흑

이 글에 대한 댓글이 총 2건 있습니다.

 오류에 대한 데이터는 필요없나요?

아린(arin76)님이 2013-08-19 18:53에 작성한 댓글입니다.
간단한 프로시져 만들어 봤습니다.
 
1) 원본테이블 SELECT
2) 복제테이블에 INSERT
3) 에러발생시 에러로그테이블에 INSERT 처리하고 계속진행
4) 프로시져 끝난후 
    INSERT INTO 복제테이블 (key값)
    SELECT key값 FROM 에러로그테이블;
    하면 에러발생 데이터도 입력처리
 
에러 내역도 필요할것 같아서 위와같이 했는데,
필요없다면
EXCEPTION 발생시
에러로그테이블 부분빼고 복제테이블에 바로 KEY 만 입력하시면 될듯합니다.
 
 
CREATE OR REPLACE PROCEDURE error_process
IS
  err_code  VARCHAR2(100);
  err_msg   VARCHAR2(300);
BEGIN
  -- 원본 테이블 SELECT 
  FOR list IN (SELECT *
                     FROM 원본테이블) LOOP
  BEGIN                     
    -- 복제테이블 INSERT 처리.                 
    INSERT INTO 복제테이블(seq, val1, val2)
    VALUES (list.seq, list.val1, list.val2);
    -- 에러발생시 에러로그 테이블에 복사 
    EXCEPTION 
      WHEN OTHERS THEN
        err_code := SQLCODE;
        err_msg  := SUBSTR(SQLERRM, 1, 200);
        INSERT INTO 에러로그테이블(seq, val1, val2, msg)
        VALUES (list.seq, list.val1, list.val2, err_code||'-'||err_msg);   
  END;                   
  END LOOP;                     
  COMMIT;
END;

 

아린(arin76)님이 2013-08-19 19:11에 작성한 댓글입니다.
이 댓글은 2013-08-19 19:14에 마지막으로 수정되었습니다.
[Top]
No.
제목
작성자
작성일
조회
40229쿼리 질문입니다.ㅠ [1]
새내기
2013-08-20
5791
40228텍스트파일 오라클 db에 넣기
질문
2013-08-19
5277
40227쿼리 질문입니다. [2]
이문정
2013-08-19
5683
40226oracle insert 에러 무시할려면... [2]
서응주
2013-08-19
7700
40225xdb 8080 포트 변경
김장혁
2013-08-16
5784
40224unix oracle client 설치에 문의 [1]
김종호
2013-08-13
6085
40223이런식일경우 정렬방법 [1]
질문
2013-08-08
6049
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다