예외 처리 PRAGMA
2024. 4. 14. 10:48ㆍDBMS/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 |