개발자 미니민의 개발스터디

[Oracle] 오라클 - PL/SQL (예외처리)

by mini_min
[Oracle]
오라클 - PL/SQL (예외처리)

✔️ 예외처리

-- 실행되는 동안 발생하는 에러를 예외라고 한다.

-- 컴파일 에러 / 런타임 에러 가 있다. 

-- 오라클도 예외를 정의할 수 있다. (사용자 정의 예외)

-- 미리 정의 하지 않은 예외도 있다.

-- 예외 블록 exception = when 절 안의 문장들을 수행하게 된다.

-- exception_name EXCEPTION;

 

-- 예외 발생
	RAISE 예외 이름;
	RAISE_APPLICATION_ERROR;

 

 

-- 시스템에서 제공하는 예외

DECLARE
	vName VARCHAR2(30),
	vSal NUMBER1
BEGIN
	SELECT name, sal INTO vName, vSal FROM emp WHERE empNo = '1001';
	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('2개 이상의 레코드가 존재합니다.');
		WHEN OTHERS THEN
			DBMS_OUTPUT.PUT_LINE('예외가 발생했습니다.');

END;
/
💡 NO_DATA_FOUND : 데이터가 없을 때 예외처리
TOO_MANY_ROWS : 두 개이상의 레코드가 출력될 때 예외처리
OTHERS : 기타 예외처리를 처리한다.

 

 

-- 사용자 정의 예외

DECLARE
	vName VARCHAR2(30);
	vSal NUMBER;
	EMP_SAL_CHECK EXCEPTION;

BEGIN
	SELECT name, sal INTO vName, vSal FROM emp WHERE empNo = '1001';

 --사용자 정의 예외 발생
	IF vSal >= 3000000 THEN
		RAISE_EMP_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('2개 이상의 레코드가 존재합니다.');
        WHEN EMP_SAL_CHECK THEN
			DBMS_OUTPUT.PUT_LINE('급여가 300만원 이상입니당');
		WHEN OTHERS THEN
			DBMS_OUTPUT.PUT_LINE('예외가 발생했습니다.');

END;
/
💡RAISE 뒤에 사용자 예외처리!
선언부에서 사용자 예외를 설정한다. 

 

 

 

 

 

 

 

블로그의 정보

개발자 미니민의 개발로그

mini_min

활동하기