본문 바로가기
Oracle/Etc

[ORACLE] TRIGGER() 실전 예제로 배우는 데이터 자동화의 핵심 기술

by Dev. Orion 2025. 6. 8.
728x90

오라클 TRIGGER() 실전 예제로 배우는 데이터 자동화의 핵심 기술
[Oracle] TRIGGER

 

1. 트리거란 무엇인가?

Oracle에서 트리거(Trigger)는 특정 이벤트(INSERT, UPDATE, DELETE 등)가 발생할 때 자동으로 실행되는 PL/SQL 코드 블록입니다. 트리거는 데이터 무결성 유지, 감사 로그 기록, 자동 계산 등의 작업에 사용됩니다.

2. 트리거의 구성 요소

  • 트리거 이벤트: INSERT, UPDATE, DELETE
  • 트리거 시점: BEFORE 또는 AFTER
  • 트리거 대상: 테이블 또는 뷰
  • 트리거 본문: 실행할 PL/SQL 문장

3. 기본 예제: BEFORE INSERT 트리거

CREATE OR REPLACE TRIGGER trg_before_insert_employee
BEFORE INSERT ON employees
FOR EACH ROW
BEGIN
  :NEW.created_at := SYSDATE;
END;
/

설명: 이 트리거는 employees 테이블에 레코드가 삽입되기 전에 자동으로 created_at 필드에 현재 날짜를 입력합니다.

4. AFTER UPDATE 트리거 예제: 변경 로그 기록

CREATE OR REPLACE TRIGGER trg_after_update_salary
AFTER UPDATE OF salary ON employees
FOR EACH ROW
BEGIN
  INSERT INTO salary_log(emp_id, old_salary, new_salary, changed_at)
  VALUES (:OLD.emp_id, :OLD.salary, :NEW.salary, SYSDATE);
END;
/

설명: 직원의 급여가 변경될 경우, 변경 전/후 정보를 salary_log 테이블에 저장합니다.

5. BEFORE DELETE 트리거 예제: 삭제 방지

CREATE OR REPLACE TRIGGER trg_prevent_delete_ceo
BEFORE DELETE ON employees
FOR EACH ROW
BEGIN
  IF :OLD.job_title = 'CEO' THEN
    RAISE_APPLICATION_ERROR(-20001, 'CEO는 삭제할 수 없습니다.');
  END IF;
END;
/

설명: CEO 직책을 가진 직원은 삭제할 수 없도록 제한합니다.

6. 트리거 유형 비교

트리거 유형 설명 적용 시점 대표 예제
BEFORE INSERT 삽입 전 자동 처리 데이터 검증/기본값 설정 created_at := SYSDATE
AFTER UPDATE 수정 후 처리 감사 로그 저장 salary_log 기록
BEFORE DELETE 삭제 전 검증 삭제 방지 CEO 삭제 방지

7. 트리거 사용 시 주의사항

  • 무한 루프 발생 가능성: 트리거 내에서 같은 테이블을 갱신하는 경우 주의
  • 성능 저하: 복잡한 로직은 시스템 성능에 영향을 줄 수 있음
  • 디버깅 어려움: 트리거 오류는 실행 시점에 발생하므로 원인 추적이 어려움

8. 트리거 관리 및 삭제

-- 트리거 상태 비활성화
ALTER TRIGGER trg_before_insert_employee DISABLE;

-- 트리거 삭제
DROP TRIGGER trg_before_insert_employee;

9. 활용 예시 요약

  • 입력값 자동 처리: 등록일, 고유 ID 등 자동 생성
  • 로그 기록: 변경 이력 자동 저장
  • 업무 규칙 강제: 중요 데이터 보호, 조건부 삭제 차단

10. 마무리: 트리거의 현명한 사용

트리거는 자동화와 무결성 유지에 매우 강력한 도구입니다. 다만, 설계 초기부터 명확한 로직으로 관리하지 않으면 시스템 유지보수에 어려움을 초래할 수 있으므로 신중한 설계와 철저한 테스트가 필수입니다.

출처

728x90