부서 ID의 최대값 조회 및 새로운 부서 ID 생성

2024. 6. 3. 18:09DBMS/PLSQL

반응형

--부서 ID의 최대값 조회 및 새로운 부서 ID 생성:

 DEPARTMENTS 테이블에서 가장 큰 DEPARTMENT_ID 값을 조회하여 새로운 부서 ID를 생성
--새로운 부서 삽입: 

생성한 새로운 부서 ID와 부서 이름을 DEPARTMENTS 테이블에 삽입
--예외 처리: 

삽입 중 발생할 수 있는 다양한 예외 상황을 처리하고, 필요시 에러 로그를 기록

 

CREATE TABLE DEPARTMENTS_TEST AS SELECT * FROM DEPARTMENTS;

CREATE TABLE ERROR_LOG(
ERROR_TIMESTAMP TIMESTAMP,
ERROR_CODE NUMBER,
ERROR_MESSAGE VARCHAR2(4000)
);

COMMIT;


DECLARE
    E_DUP_EXCEP  EXCEPTION;
    PRAGMA EXCEPTION_INIT(E_DUP_EXCEP, -00001);
    
    E_INSERT_EXCEP EXCEPTION;
    PRAGMA EXCEPTION_INIT(E_INSERT_EXCEP, -01400);
    
    V_MAX_DID DEPARTMENTS.DEPARTMENT_ID%TYPE;
    
    
    ERROR_CODE NUMBER;
    ERROR_MESSAGE VARCHAR2(100);
    
BEGIN
    SELECT MAX(DEPARTMENT_ID)
    INTO V_MAX_DID
    FROM DEPARTMENTS_TEST;
    
    --새 DEPARTMENT_ID 설정 
    
    V_MAX_DID := NVL(V_MAX_DID, 0) +10;
    --NVL 함수는 첫 번째 인수가 NULL이면 두 번째 인수를 반환하고, 그렇지 않으면 첫 번째 인수를 반환한다.
    
    
    --새로운 부서 삽입
    INSERT INTO DEPARTMENTS_TEST(DEPARTMENT_ID, DEPARTMENT_NAME)
    VALUES(V_MAX_DID, 'QA');
    
    --부서 삽입 성공 메시지
    DBMS_OUTPUT.PUT_LINE('부서 삽입 성공');
    
    EXCEPTION
    
    --NULL값  삽입 시 예외 처리
    WHEN E_INSERT_EXCEP THEN
        DBMS_OUTPUT.PUT_LINE('INSERT OPERATION FAILED :NULL 값이 포함되어 있습니다');
    
    WHEN E_DUP_EXCEP THEN
        DBMS_OUTPUT.PUT_LINE('중복부서번호');
        
    WHEN TOO_MANY_ROWS THEN
        DBMS_OUTPUT.PUT_LINE('MANY DEPARTMENTS');
    WHEN NO_DATA_FOUND THEN
        DBMS_OUTPUT.PUT_LINE('NO DEPARTMENTS');
    
    WHEN OTHERS THEN
        ERROR_CODE:=SQLCODE; --에러 코드 저장
        ERROR_MESSAGE:=SQLERRM; --에러 메세지 저장
        DBMS_OUTPUT.PUT_LINE(ERROR_CODE || ': ' || ERROR_MESSAGE);
        
            BEGIN 
            
                INSERT INTO ERROR_LOG (ERROR_TIMESTAMP, ERROR_CODE,ERROR_MESSAGE)
                VALUES (SYSTIMESTAMP, ERROR_CODE,ERROR_MESSAGE);
                
            EXCEPTION 
                WHEN OTHERS THEN
                    DBMS_OUTPUT.PUT_LINE('FAILED TO INSERT INTO ERROR_LOG TABLE');
                    
                END;
                
                
        END;

 

 

 

 PRAGMA는 컴파일러나 인터프리터에게 특정 작업을 수행하도록 지시하는 데 사용된다.

 

PRAGMA EXCEPTION_INIT는 특정 예외 코드와 예외 이름을 연결하는 데 사용되는데

PRAGMA EXCEPTION_INIT(E_DUP_EXCEP, -00001);는 -00001 오류 코드를 가진 예외를 E_DUP_EXCEP이라는 이름으로 정의하여 예외가 발생할 때 예외 이름 대신 코드를 사용하여 예외를 처리할 수 있다.



반응형

'DBMS > PLSQL' 카테고리의 다른 글

WHERE CURRENT OF 절 | 명시적 커서  (0) 2024.09.08
특정 부서 번호를 입력받아 삭제  (1) 2024.06.03
스키마 테이블 모두 삭제  (0) 2024.05.30
bind 변수 사용  (0) 2024.05.24
fetch row 가 2건 이상일 때 오류  (0) 2024.05.24