예외 처리 PRAGMA

2024. 4. 14. 10:48DBMS/PLSQL

반응형


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;
    
    INSERT INTO DEPARTMENTS (DEPARTMENT_ID, DEPARTMENT_NAME)
    VALUES (V_MAX_DID, 'IT SUPPORT');
EXCEPTION
    WHEN E_INSERT_EXCEP THEN
        DBMS_OUTPUT.PUT_LINE('INSERT OPERATION FAILED');
    
    WHEN E_DUP_EXCEP THEN
        DBMS_OUTPUT.PUT_LINE('DUPLICATE DEPARTMENT NUM');
        
    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
        DBMS_OUTPUT.PUT_LINE(SQLCODE || ': ' || SQLERRM);
      
        ERROR_CODE := SQLCODE;
        ERROR_MESSAGE := SQLERRM;
        
        INSERT INTO ERROR
        VALUES (SYSTIMESTAMP, ERROR_CODE, ERROR_MESSAGE);
END;
/


-`E_DUP_EXCEP` 및 `E_INSERT_EXCEP`: 사용자 정의 예외를 선언한다. 

 

`E_DUP_EXCEP`는 중복 레코드가 발생했을 때 발생하는 예외

`E_INSERT_EXCEP`은 NULL 값을 허용하지 않는 열에 NULL 값을 삽입할 때 발생하는 예외


- `PRAGMA EXCEPTION_INIT`: 사용자 정의 예외에 대한 에러 코드를 초기화

`-00001`은 중복 예외 코드이고, `-01400`은 NULL 값을 허용하지 않는 열에 NULL 값을 삽입할 때의 예외

 

"PRAGMA"는 "Pragmatic"의 줄임말로, 프로그래밍 언어에서 컴파일러나 인터프리터에게 특정 지시를 내리는 명령이다. 특히, Oracle PL/SQL에서 PRAGMA는 컴파일러에게 컴파일 옵션을 설정하거나 예외 처리에 대한 정보를 전달하는 데 사용된다.

- `PRAGMA EXCEPTION_INIT`는 사용자 정의 예외를 정의하고 해당 예외가 발생할 때의 예외 코드를 초기화하는 데 사용된다. 다른 예로, `PRAGMA AUTONOMOUS_TRANSACTION`은 프로시저나 함수를 독립 트랜잭션으로 실행하도록 지시한다.

 

 

-`V_MAX_DID`: `DEPARTMENTS` 테이블의 `DEPARTMENT_ID` 열과 같은 유형의 변수를 선

 

- `ERROR_CODE` 및 `ERROR_MESSAGE`: 에러 코드와 에러 메시지를 저장할 변수를 선언


        
        
INSERT INTO DEPARTMENTS (DEPARTMENT_ID, DEPARTMENT_NAME)
VALUES (100, 'Finance');

INSERT INTO DEPARTMENTS (DEPARTMENT_ID, DEPARTMENT_NAME)
VALUES (101, NULL);



Error starting at line : 56 in command -
INSERT INTO DEPARTMENTS (DEPARTMENT_ID, DEPARTMENT_NAME)
VALUES (100, 'Finance')
Error report -
ORA-00001: unique constraint (PLORA1.DEPARTMENTS_PK) violated


Error starting at line : 59 in command -
INSERT INTO DEPARTMENTS (DEPARTMENT_ID, DEPARTMENT_NAME)
VALUES (101, NULL)
Error report -
ORA-01400: cannot insert NULL into ("PLORA1"."DEPARTMENTS"."DEPARTMENT_NAME")
반응형

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

fetch row 가 2건 이상일 때 오류  (0) 2024.05.24
PL/SQL 기본 구조  (0) 2024.04.18
여러개의 행을 한 번에 가져오는 CURSOR LOOP  (0) 2024.04.13
삽입 정렬 insertion Sort  (0) 2024.03.18
EXTEND  (0) 2024.02.04