Oracle/Oracle 설치

3. 오라클 예외처리

개인공부 2026. 1. 14. 22:45

■ 오라클 예외처리의 종류 3가지

  1. 오라클에서 미리 정의한 예외
  2. 오라클에서 미리 정의하지 않은 예외
  3. 사용자 정의 예외
  4. 오라클에서 미리 정의한 예외

 

Q1. 아래의 상황에서 예외처리를 하시오

답:

set  serveroutput  on
accept   p_ename  prompt   '이름을 입력하세요 ~'

declare
    v_ename     emp.ename%type :=  upper('&p_ename');
    v_sal       emp.sal%type ;
    
begin
    select   sal   into   v_sal
      from  emp
     where  ename = v_ename;

    dbms_output.put_line( v_sal );
    
    exception  
    
    when no_data_found then 
       dbms_output.put_line('입력하신 사원은 사원 테이블에 없습니다') ;
       
    when too_many_rows then
       dbms_output.put_line('입력하신 사원의 이름이 여러명입니다. 고객 센터로 문의하세요');
    
end;
/

 

 

 

Q2.. 코드를 실행할때 dept 테이블에 없는 부서번호를 입력하면 해당 부서번호는 우리회사에 없습니다. 라고 메세지가 출력되게 예외처리하시오

 

답 :

set serveroutput on

accept  p_deptno  prompt  '부서번호를 입력하세요 ~'

declare
    v_deptno   dept.deptno%type := &p_deptno;
    v_loc      dept.loc%type;

begin
   select  loc into v_loc
     from dept
     where  deptno = v_deptno;
     
   dbms_output.put_line('입력하신 부서번호의 부서위치는 ' || v_loc || ' 입니다');
   
   exception 
    when **no_data_found**  then
      dbms_output.put_line('입력하신 부서번호는 우리 회사에 없습니다.');
   
end;
/

 

 


 

■ 오라클 예외처리의 종류 3가지

  1. 오라클에서 미리 정의한 예외
  2. 오라클에서 미리 정의하지 않은 예외
  3. 사용자 정의 예외

오라클에서 미리 정의 하지 않은 예외처리 인 경우는 직접 예외처리를 해야하는데 pragma exception_init 를 이용해서 예외처리 하면 됩니다.

 

Q1. 다음과 같이 오라클에서 정의되지 않은 예외처리가 발생했을경우 해결하시오

 

답:

accept  p_empno  prompt  '사원번호를 입력하세요 ~'
accept  p_ename  prompt  '사원이름을 입력하세요 ~'
accept  p_sal    prompt  '월급을 입력하세요 ~'

declare
    e_except1   exception; 
    **pragma  exception_init( e_except1 , -02290 );**

begin
    insert  into  emp(empno, ename, sal)
       values( &p_empno, '&p_ename', &p_sal);
   
   commit;
   
   exception 
      when  dup_val_on_index then 
         dbms_output.put_line('기존에 있는 사원번호로 입력하셨습니다');
      when e_except1  then
         dbms_output.put_line('회사 규정상 월급을 9000 보다 크게 입력하실 수 없어요');
   
end;
/

 

 


■ 오라클 예외처리의 종류 3가지

  1. 오라클에서 미리 정의한 예외
  2. 오라클에서 미리 정의하지 않은 예외
  3. 사용자 정의 예외

오라클 에러가 발생하는 것은 아닌데 이 부분은 예외로 하고 싶을때

이때, 직접 예외를 정의하여 사용하는 예외를 사용자 정의 예외 라고 합니다

 

Q1.사용자 정의 예외처리로 구현해서 월급이 3000 이상인 사원들을 조회하려 하면 해당 사원의 월급은 회사 규정상 볼 수 없습니다. 라는 메세지가 출력되게하시오

 

set serveroutput on

accept  p_ename  prompt  '사원이름을 입력하세요 ~ '

declare
   v_ename    emp.ename%type := upper('&p_ename');
   v_sal      emp.sal%type;
   **e_invalid**   exception; 
   
begin
  select  sal  into  v_sal
     from  emp
     where  ename = v_ename;
  
  if  v_sal >= 3000 then
     **raise**  **e_invalid**;
  end if;   
     
 dbms_output.put_line( v_sal );
 
 exception  
      when e_invalid  then
          dbms_output.put_line('해당 사원의 월급은 회사 규정상 보실 수 없습니다.');
 
end;
/