본문 바로가기
개발 수업/DB

[PL/SQL] 예외(Exception),pragma

by 오늘 하루s 2023. 6. 15.
728x90
더보기

Day33. 230615

예외(Exception)

- 컴파일할 때 문법적인 오류로 발생하는 컴파일 타임 오류와, 

프로그램을 실행 할 때 발생하는 실행타임 오류로 구분할 수 있다.

 

예외처리 구문

EXCEPTION WHEN 예외명 1 THEN 예외처리 구문1
WHEN 예외명2 THEN 예외처리 구문2
...
WHEN OTHERS THEN 예외처리 구문n;

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
CREATE OR REPLACE PROCEDURE update_sal_proc(  
    p_empno   IN   emp.empno%TYPE,
    p_n   IN number:=0
 )
IS 
    pragma autonomous_transaction;
    v_sal  number;
BEGIN
  select sal
  INTO  v_sal
  from  emp
  where empno=p_empno;      
  
  update emp
  set    sal = sal+p_n
  where  empno=p_empno;
  commit;
--예외처리
 EXCEPTION
  WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('해당 사원이 존재하지 않습니다.');
  WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('예외가 발생했어요. '||SQLERRM);
 ROLLBACK; 
END;
/
cs

 

 

1
2
3
4
--프로시저 실행
select empno,ename,sal from emp where empno=736--no rows selected
exec UPDATE_SAL_PROC(736,300); --ORA-01403: no data found,예외 처리하지 않았을 때.
exec UPDATE_SAL_PROC(736,300); --해당 사원이 존재하지 않습니다.
cs

-> 예외 처리 됨.

 

 

 

pragma

- 컴파일러가 실행되기 전에 처리하는 전처리기 역할.

pragma를 사용하면 컴파일러는 런타임 때와는 다른 결과를 내도록 동작.

즉 컴파일할 때 뭔가를 처리하라고 컴파일러에게 지시하는 역할

PL/SQL 블록의 선언부에 명시하며 사용법은 다음과 같음.

 

1) pragma autonomous_transaction;

 트랜잭션 처리를 담당, 주 트랜잭션이나 다른 트랜잭션에 영향을 받지 않고 독립적으로 현재 블록 내부에서 데이터베이스에 가해진 변경 사항을 commit이나 rollback 하라는 지시 하는 역할

 

2) pragma exception_int(예외명, 예외번호)

 특정 예외번호를 명시해서 컴파일러에 이 예외를 사용한다는 것을 알리는 역할.

 

3) pragma restrict_refereces(서브 프로그램명, 옵션)

 오라클 패키지를 사용할 때 선언해 놓으면 패키지에 속한 서브 프로그램에서 옵션 값에 따라 특정 동작을 제한 할 때 사용.

 

4) pragma serially_resuable

 패키지 메모리 관리를 쉽게 할 목적으로 사용,

패키지에 선언된 변수에 대해 한 번 호출 된 후 메모리를 해제시킴.

728x90