본문 바로가기

Database/PLSQL

029 - [Oracle PL/SQL] Exceptions - User defined Error

<샘플코드에서 사용한 데이터는 HR 스키마이고, 오라클 설치시 생성할 수 있는 기본 스키마 입니다>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

declare
	v_employee_id number:=1;

begin
    update employees
    set salary=20000
    where employee_id=v_employee_id;

	dbms_output.put_line(sql%rowcount);

end;
--------------------------------------
# 조건에 맞는 데이터가 없으므로 업데이트 되는 데이터는 없다.
# 그래서 적용된 row 개수는 0 이다.
0



# 에러는 아니지만 조건에 맞는 데이터가 없는 경우 에러를 발생시키는 샘플

declare
    v_employee_id number:=1;
    e_invalid_no exception;
begin

    update employees
    set salary=20000
    where employee_id=v_employee_id;
    
    dbms_output.put_line(sqlcode); >>> 0
    dbms_output.put_line(sqlerrm); >>> "ORA-0000: normal, successful completion"
    
    if sql%notfound then
        raise e_invalid_no;
    end if;
    
    commit; >>> 조건에 맞는 데이터가 없으면 예외처리로 넘어가서 실행되지 않는다.
    
    exception 
        when e_invalid_no then
        dbms_output.put_line('invalid emp ID');
        dbms_output.put_line(sqlcode);
        dbms_output.put_line(sqlerrm);
end;
------------------------
0
ORA-0000: normal, successful completion

invalid emp ID
1
User-Defined Exception

 

 

 

# 사용자 예외처리를 발생시키는 다른 방법.

declare
    v_employee_id number:=1;
    ---e_invalid_no exception;
begin

    update employees
    set salary=20000
    where employee_id=v_employee_id;

    if sql%notfound then
        ---raise e_invalid_no;
        raise_application_error(-20000, 'invalid emp ID');
    end if;
    
    commit;

end;
------------------------------------------------------------------
Error report -
ORA-20000: invalid emp ID
ORA-06512: at line 12
20000. 00000 -  "%s"
*Cause:    The stored procedure 'raise_application_error'
           was called which causes this error to be generated.
*Action:   Correct the problem as described in the error message or contact
           the application administrator or DBA for more information.