◎ 에러의 종류
- 런타임 에러 : 논리적으로 맞지만 이상한것
→ 예외처리를 발생시킴
- 컴파일 에러 : 오타등으로
◎ 예외처리 종류
오라클 예외
- 이름이 정해진 예외(predefinde Oracle Exception)
- 이름이 정해지지 않은 예외(non-predefinde Oracle Exception)
★★★ 사용자 정의 예외
※ 예외 처리가 없다면 프로그램이 실패한 체로 종료가됨
※ 에러코드 20000 - 20999 까지는 사용자가 만든에로
방법
① 선언부에서 선언한다음 실행부 or 예외처리 부에서 RAISE 문을 통해 실행
② RAISE_APPLICATION_ERROR 프로시저를 통해 사용
종류
① ORACLE에서 정의한 이름을 사용해서 사용자가 예외를 출력하기
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE(' No people !');
WHEN TOO_MANY_ROWS THEN
DBMS_OUTPUT.PUT_LINE(' More than 2 people !');
★★ PRAGMA 키워드를
② ORACLE에서 정의한 내용을 사용자가 다시 선언 해서 예외 처리하기
맨첫번째 줄에 있음
ORA-02292: integrity constraint (SCOTT.FK_DEPTNO) violated - child record found
DECLARE
child_exist EXCEPTION;
PRAGMA EXCEPTION_INIT(child_exist,-02292);
BEGIN
DELETE FROM dept
WHERE deptno =&dno;
COMMIT;
EXCEPTION
WHEN child_exist THEN
DBMS_OUTPUT.PUT_LINE('Can not delete! Child key found ! ');
END ;
/
③ 테이블에 데이터가 없는경우 RISE 를 사용 예외선언 및 예외 처리를 해준다
- 문법적으로 오류는 아님
DECLARE
-- 예외를 선언 해준다
no_empno EXCEPTION ;
BEGIN
UPDATE EMP
SET sal = 6000
WHERE empno =&empno;
-- 수행한 데이터가 아무것도 없는경우
IF SQL%NOTFOUND THEN
--RAISE 명령어를 수행함
RAISE no_empno ;
END IF;
-- 예외를 수행함
EXCEPTION
WHEN no_empno THEN
DBMS_OUTPUT.PUT_LINE('Not Exist your number ! ');
END ;
/
④
'ORACLE > PL/SQL' 카테고리의 다른 글
참조하기 (0) | 2015.03.26 |
---|---|
150325 서브프로그램 (0) | 2015.03.25 |
150324 커서 (0) | 2015.03.24 |
150323 조건문 & 반복문 (0) | 2015.03.23 |
150323 변수 (0) | 2015.03.23 |