18 - 2 오류가 발생해도 프로그램이 비정상 종료되지 않도록 하는 예외 처리


오류란?

  • 오라클에서 SQL 또는 PL/SQL이 정상 수행되지 못하는 상황을 오류(error)라고 한다. 이 오류는 크게 두 가지로 구분된다.

    1. 문법이 잘못되었거나 오타로 인한 오류로 컴파일 오류(compile Error), 문법 오류(syntax error)라고 한다.

    2. 명령문의 실행 중 발생한 오류를 런타임 오류(runtime error) 또는 실행 오류(execute error)라고 부른다.

  • 오라클에서는 이 두 가지 오류 중 후자, 즉 프로그램이 실행되는 도중 발생하는 오류를 예외(exception)라고 한다.


예외 종류

  • 오라클에서 예외는 크게 내부 예외(internal exceptions)와 사용자 정의 예외(user-defined exceptions)로 나뉜다.

    1. 내부예외 : 오라클에서 미리 정의한 예외를 뜻하며 내부 예외는 이름이 정의되어 있는 예외인 사전 정의된 예외(predefined name exceptions)와 이름이 정해지지 않은 예외로 다시 나뉜다.

    2. 사용자 정의 예외 : 사용자가 필요에 따라 추가로 정의한 예외를 의미한다.

예외 종류설명
내부 예외
(internal
exceptions)
사전 정의된 예외
(predefined name exceptions)
내부 예외 중 예외 번호에 해당하는 이름이 존재하는 예외
이름이 없는 예외
(unnames exceptions)
내부 예외 중 이름이 존재하지 않는 예외(사용자가 필요에 따라 이름을 지정할 수 있음)
사용자 정의 예외(user-defined exceptions)사용자가 필요에 따라 직접 정의한 예외

예외 처리부 작성

  • 예외 처리부는 EXCEPTION절에 필요한 코드를 사용하여 작성한다.
  • 여러 예외를 명시하여 작성할 수 있다.
  • WHEN으로 시작하는 절을 예외 핸들러(exception handler)라고 하며, 발생한 예외 이름과 일치하는 WHEN절의 명령어를 수행한다.
  • 수행할 명령어는 PL/SQL 실행부와 마찬가지로 여러 문법을 사용할 수 있다.
  • OTHERS는 먼저 작성한 어느 예외와도 일치하는 예외가 없을 경우에 처리할 내용을 작성한다.
// 기본 형식
EXCEPTION
  WHEN 예외 이름1 [OR 예외 이름2 - ] THEN
    예외 처리에 사용할 명령어;
  WHEN 예외 이름3 [OR 예외 이름4 - ] THEN
    예외 처리에 사용할 명령어;
  ...
  WHEN OTHERS THEN
    예외 처리에 사용할 명렁어;

이름 없는 예외 사용

  • 이름이 없는 내부 예외를 사용해야 한다면 이름을 직접 지정해 주어야 예외 처리부에서 사용할 수 있다.
// 기본 형식
DECLARE
  예외 이름1 EXCEPTION;
  PRAGMA EXCEPTION_INIT(예외 이름1, 예외 번호);
.
.
.
EXCEPTION
  WHEN 예외 이름1 THEN
    예외 처리에 사용할 명령어;
  ...
END;

사용자 정의 예외 사용

  • 사용자 정의 예외는 오라클에 정의되어 있지 않은 특정 상황을 직접 오류로 정의하는 방식이다.
// 기본 형식
DECLARE
  사용자 예외 이름 EXCEPTION;
  ...
BEGIN
  IF 사용자 예외를 발생시킬 조건 THEN
    RAISE 사용자 예외 이름
  ...
  END IF;
EXCEPTION
  WHEN 사용자 예외 이름 THEN
    예외 처리에 사용할 명령어;
  ...
END;

오류 코드와 오류 메시지 사용

  • 오류 처리부가 잘 작성되어 있다면 오류가 발생해도 PL/SQL은 정상 종료된다. PL/SQL문의 정상 종료 여부와 상관없이 발생한 오류 내역을 알고 싶을 때 SQLCODE, SQLERRM 함수를 사용한다.
함수설명
SQLCODE오류 번호를 반환하는 함수
SQLERRM오류 메시지를 반환하는 함수

profile
블로그 이사 중 ⭐️ || https://bebeco.tistory.com/

0개의 댓글