💡 Oracle PL/SQL 핵심 완벽 가이드 – 예외 처리와 트랜잭션
Oracle PL/SQL에서 신뢰성 있고 견고한 시스템을 구현하려면 반드시 예외 처리와 트랜잭션 제어를 잘 다뤄야 합니다. 이 글에서는 실무에 꼭 필요한 핵심 문법과 예제를 통해 확실하게 이해할 수 있도록 도와드립니다.
1. 예외 처리 (Exception Handling)
PL/SQL에서 오류 발생 시, 프로그램이 중단되지 않도록 로직으로 예외를 안정적으로 처리하는 방법입니다.
📌 예외 처리 구문 기본 형태
BEGIN
-- 실행 구문
EXCEPTION
WHEN 예외1 THEN
처리 구문1;
WHEN 예외2 THEN
처리 구문2;
WHEN OTHERS THEN
처리 구문N;
END;
1.1 시스템 예외 처리 예제
DECLARE
v_result NUMBER;
BEGIN
v_result := 10 / 0; -- 0으로 나누기 → ZERO_DIVIDE 발생
EXCEPTION
WHEN ZERO_DIVIDE THEN
DBMS_OUTPUT.PUT_LINE('0으로 나눌 수 없습니다!');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('알 수 없는 오류: ' || SQLERRM);
END;
1.2 SQLCODE와 SQLERRM으로 오류 정보 출력
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('오류 코드: ' || SQLCODE);
DBMS_OUTPUT.PUT_LINE('오류 메시지: ' || SQLERRM);
1.3 사용자 정의 예외
DECLARE
e_salary_low EXCEPTION;
v_salary NUMBER := 500;
BEGIN
IF v_salary < 1000 THEN
RAISE e_salary_low;
END IF;
EXCEPTION
WHEN e_salary_low THEN
DBMS_OUTPUT.PUT_LINE('급여가 너무 낮습니다!');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;
⚠️ 팁: 사용자 정의 예외는 반드시
RAISE로 명시적으로 발생시켜야 합니다.
2. 트랜잭션(Transaction) 제어
트랜잭션은 여러 SQL 작업을 하나의 단위로 묶어 처리하는 기능으로, 데이터 무결성 보장에 필수입니다.
2.1 COMMIT / ROLLBACK 기본
BEGIN
UPDATE employees SET salary = salary + 100 WHERE department_id = 10;
COMMIT; -- 변경 사항 영구 반영
EXCEPTION
WHEN OTHERS THEN
ROLLBACK; -- 오류 발생 시 모든 변경 취소
DBMS_OUTPUT.PUT_LINE('작업 실패: ' || SQLERRM);
END;
2.2 SAVEPOINT를 활용한 부분 롤백
BEGIN
INSERT INTO log_table VALUES ('Step 1');
SAVEPOINT step1;
UPDATE employees SET salary = salary * 1.1 WHERE department_id = 20;
SAVEPOINT step2;
DELETE FROM employees WHERE salary > 100000;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK TO step2; -- 특정 시점까지만 롤백
DBMS_OUTPUT.PUT_LINE('Rollback to step2: ' || SQLERRM);
END;
✅ 트랜잭션 제어 키워드 요약
- COMMIT: 모든 변경사항을 확정
- ROLLBACK: 전체 또는 저장 지점까지 되돌리기
- SAVEPOINT: 롤백 시점을 설정
✔ 트랜잭션과 예외 처리를 함께 활용하면, 오류 발생 시 데이터가 잘못 저장되는 것을 방지할 수 있습니다.
3. 마무리
예외 처리와 트랜잭션은 PL/SQL의 가장 중요한 요소 중 하나입니다. 다양한 예외 상황을 꼼꼼히 처리하고, 트랜잭션을 적절히 관리하여 안정적이고 신뢰할 수 있는 데이터베이스 로직을 구현해보세요.
'Oracle' 카테고리의 다른 글
| Oracle.PL/SQL기본 (0) | 2025.06.03 |
|---|---|
| Oracle.정규식(Regular Expressions) (0) | 2025.06.03 |
| Oracle.SQL고급 (0) | 2025.06.03 |
| Oracle.조인과 서브쿼리 (0) | 2025.05.31 |
| Oracle.그룹 쿼리와 집계함수 (1) | 2025.05.31 |