DB - Oracle

SQL - 예외처리

예외

 

-- 예외 P. 474
CREATE OR REPLACE PROCEDURE TEST111
(
  V_STU_NO IN STUDENT.STU_NO%TYPE
)
IS
  V_STU_NAME STUDENT.STU_NAME%TYPE;
BEGIN
    SELECT STU_NAME INTO V_STU_NAME
        FROM STUDENT
      WHERE STU_NO = V_STU_NO;
    DBMS_OUTPUT.PUT_LINE (V_STU_NAME);
    
    EXCEPTION
      WHEN NO_DATA_FOUND THEN
        DBMS_OUTPUT.PUT_LINE ('해당 데이터가 존재하지 않는다');
END TEST111;
/

SELECT * FROM STUDENT;
EXECUTE TEST111(20153075);
DECLARE
  V_WRONG DATE;
BEGIN
    SELECT ENAME INTO V_WRONG
        FROM EMP
      WHERE EMPNO = 7369;
      
      DBMS_OUTPUT.PUT_LINE ('예외가 발생하면 다음 문장은 실행되지 않습니다');
      
    EXCEPTION
      WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE ('오류가 발생하였습니다 ' || TO_CHAR(SYSDATE, '[YYYY"년"MM"월"DD"일" HH24"시"MM"분"SS"초"]'));
END;
/

 

  • RAISE
    • 예외를 직접 만드는 작업 → 예외를 일부러 발생시킨다
    • CNT_ERROR EXCEPTION : 예외(에러) 변수
CREATE OR REPLACE PROCEDURE TEST22
(
  V_SUB_NO IN ENROL.SUB_NO%TYPE
)
IS
  V_CNT NUMBER;
  CNT_ERROR EXCEPTION;
BEGIN
    SELECT COUNT(STU_NO) INTO V_CNT
      FROM ENROL
    WHERE SUB_NO = V_SUB_NO;
    
    IF V_CNT = 0 THEN
      RAISE CNT_ERROR;
    END IF;
    
    DBMS_OUTPUT.PUT_LINE (V_SUB_NO || '과목 수강자는 ' || V_CNT || '명');
    
  EXCEPTION
    WHEN CNT_ERROR THEN
      DBMS_OUTPUT.PUT_LINE (V_SUB_NO || ' 과목 수강자는 없다');
END TEST22;
/

EXECUTE TEST22(109);
728x90
728x90

'DB - Oracle' 카테고리의 다른 글

커서와 패키지  (0) 2022.06.27
SQL - 함수  (0) 2022.06.22
PL/SQL, 저장 프로시저(SP)  (0) 2022.06.21
데이터베이스의 주요 객체 - Object  (0) 2022.06.20
SQL - 집합 연산자, CRUD  (0) 2022.06.17