-- 예외처리
DECLARE
vName VARCHAR2(30);
vSal NUMBER;
BEGIN
SELECT name, sal INTO vName, vSal FROM emp WHERE empNo = '1001';
-- SELECT name, sal INTO vName, vSal FROM emp WHERE empNo = '9001'; -- NO_DATE_FOUND
-- SELECT name, sal INTO vName, vSal FROM emp; -- TOO_MANY_ROWS
DBMS_OUTPUT.PUT_LINE(vName || ' : ' || vSal);
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('등록된 자료가 없습니다.');
WHEN TOO_MANY_ROWS THEN
DBMS_OUTPUT.PUT_LINE('두 개 이상의 레코드가 존재합니다.');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('기타 에러가 발생 했습니다.');
END;
/
-- 사용자 정의 예외
DECLARE
vName VARCHAR2(30);
vSal NUMBER;
sal_check EXCEPTION; -- 사용자 정의 예외 선언
BEGIN
SELECT name, sal INTO vName, vSal FROM emp WHERE empNo = '1001';
IF vSal >= 3000000 THEN
RAISE sal_check; -- 예외를 발생시킴
END IF;
DBMS_OUTPUT.PUT_LINE(vName || ' : ' || vSal);
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('등록된 자료가 없습니다.');
WHEN TOO_MANY_ROWS THEN
DBMS_OUTPUT.PUT_LINE('두 개 이상의 레코드가 존재합니다.');
WHEN sal_check THEN
DBMS_OUTPUT.PUT_LINE('급여가 300 이상입니다.');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('기타 에러가 발생 했습니다.');
END;
/
또, 여태까지 썼던
2021.08.20 - [쌍용강북교육센터/8월] - 0819_Oracle[PL/SQL] : PROCEDURE, FUNCTION 예제
IF 조건
RAISE_APPLICATION_ERROR(-20001, '여기에 메세지 입력');
END IF;
방법도 있었다.
이때 안에있는 번호는 20000 부터 20999까지 가능하다.
'쌍용강북교육센터 > 8월' 카테고리의 다른 글
0823_Java : OutputStream 클래스 (0) | 2021.08.23 |
---|---|
0823_Java : InputStream 클래스 (0) | 2021.08.23 |
0820_Oracle[PL/SQL] : CURSOR 커서 (0) | 2021.08.23 |
0820_Oracle[PL/SQL] : TRIGGER 트리거 (0) | 2021.08.23 |
0820_Oracle[PL/SQL] : PACKAGE 패키지 (0) | 2021.08.23 |