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
'개발 수업 > DB' 카테고리의 다른 글
[PL/SQL] PL/SQL구성요소(상수),PL/SQL 제어문 (0) | 2023.06.16 |
---|---|
DB, JAVA 연동 (0) | 2023.06.15 |
[PL/SQL] 사용자함수(FUNCTION) / 함수와 프로시저 비교 (0) | 2023.06.15 |
[PL/SQL] 프로시저(Procedure) (0) | 2023.06.15 |
[PL/SQL] PL/SQL BLOCK Structure (0) | 2023.06.15 |