부서 ID의 최대값 조회 및 새로운 부서 ID 생성
2024. 6. 3. 18:09ㆍDBMS/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 |