2016년 7월 28일 목요일

[IT실무고급교육★탑크리에듀]오라클 예외처리와 SQLCODE, SQLERRM 함수


오라클 예외처리와 SQLCODE, SQLERRM 함수 

 SQLCODE : 오라클 서버 에러코드를 정수로 리턴한다. 
 SQLERRM : 오라클 서버 에러메시지를 리턴한다. 
 발생하는 예외에 대해 보편적으로 EXCEPTION절에서 하나씩 예외를 받아서 처리해도 되지만 WHEN OTHRES THEN 절만 기술하고 아래처럼 사용할 수도 있다. 

EXCEPTION 
  WHEN OTHERS THEN 
      raise_application_error(-20001, SQLCODE || ' => ' || SQLERRM); 
END; 
 만약 에러로그 테이블을 운영한다면 다음처럼 기술하면 된다. 

EXCEPTION 
  WHEN OTHERS THEN 
      errcode := SQLCODE; 
      errmsg := SQLERRM; 
      INSERT INTO errlog VALUES (errcode, errmsg); 
END; 

SQL> create or replace procedure deldept2 
  2      (p_deptno in dept.deptno%type) 
  3      as 
  4  begin 
  5        delete from dept 
  6        where deptno=p_deptno; 
  7 
  8        commit; 
  9  exception 
 10        when others then 
 11          rollback; 
 12          raise_application_error(-20001, 
 13                '에러발생! 에러코드 => '||SQLCODE|| ' 에러메시지 => ' ||SQLERRM); 
 14  end; 
 15  / 
프로시저가 생성되었습니다. 

SQL>  exec deldept2(10) 
BEGIN deldept2(10); END; 


1행에 오류: 
ORA-20001: 에러발생! 에러코드 => -2292 에러메시지 => ORA-02292: 무결성 
제약조건(SCOTT.FK_DEPTNO)이 위배되었습니다- 자식 레코드가 발견되었습니다 
ORA-06512: "SCOTT.DELDEPT2",  12행 
ORA-06512:  1행

댓글 없음:

댓글 쓰기