ORACLE PL/SQL 트리거(Trigger) 작성 및 활용 사례
Oracle PL/SQL에서 트리거(Trigger)는 데이터베이스에서 발생하는 이벤트에 따라 자동으로 실행되는 프로시저입니다. 트리거는 데이터 변경 작업을 자동화하고, 데이터의 무결성을 유지하며, 이벤트 기반 로직을 처리할 수 있게 해줍니다. 이 글에서는 트리거의 작성법과 활용 사례를 다루어 보겠습니다.
1. 트리거(Trigger)란?
트리거는 특정 DML(데이터 조작 언어) 작업이 발생할 때 자동으로 실행되는 저장 프로시저입니다. 트리거는 INSERT, UPDATE, DELETE와 같은 이벤트에 반응하여 데이터를 처리하거나 로그를 기록하는 등 다양한 작업을 자동화할 수 있습니다. PL/SQL 트리거는 BEFORE, AFTER, INSTEAD OF와 같은 트리거 시점에 따라 다르게 작동합니다.
2. 트리거 종류
Oracle PL/SQL에서 사용할 수 있는 트리거 종류는 다음과 같습니다:
- BEFORE Trigger: 데이터가 수정되기 전에 트리거가 실행됩니다.
- AFTER Trigger: 데이터가 수정된 후 트리거가 실행됩니다.
- INSTEAD OF Trigger: 데이터를 수정하는 대신 트리거가 실행됩니다. 주로 뷰(View)에서 사용됩니다.
- ROW Trigger: 한 행씩 처리하는 트리거입니다. 각 행의 변경에 대해 트리거가 실행됩니다.
- STATEMENT Trigger: DML 문장이 실행될 때 한 번만 실행되는 트리거입니다.
3. 트리거 작성법
트리거는 CREATE TRIGGER
문을 사용하여 작성할 수 있습니다. 트리거를 작성할 때는 트리거의 이벤트와 실행 시점을 정의해야 합니다. 예를 들어, 특정 테이블에 데이터가 삽입되기 전에 자동으로 특정 작업을 실행하려면 BEFORE INSERT 트리거를 사용할 수 있습니다.
3.1. 트리거 작성 예제
다음은 employees
테이블에 데이터가 삽입될 때 자동으로 해당 행을 기록하는 트리거의 예제입니다.
CREATE OR REPLACE TRIGGER employee_insert_trigger
BEFORE INSERT ON employees
FOR EACH ROW
BEGIN
INSERT INTO audit_log (action, table_name, record_id, action_time)
VALUES ('INSERT', 'employees', :NEW.employee_id, SYSDATE);
END;
위 트리거는 employees
테이블에 새로운 직원 데이터가 삽입되기 전에 audit_log
테이블에 로그를 기록합니다. :NEW
는 새로 삽입되는 값을 참조하는 키워드입니다.
4. 트리거 활용 사례
트리거는 다양한 실무 사례에서 활용될 수 있습니다. 몇 가지 예시를 들어 보겠습니다.
4.1. 데이터 무결성 유지
트리거는 데이터 무결성을 보장하기 위해 유용하게 사용됩니다. 예를 들어, 직원의 급여가 특정 금액을 초과할 수 없도록 하는 트리거를 작성할 수 있습니다. 급여가 조건을 위반하면 트리거가 오류를 발생시켜 데이터를 삽입할 수 없게 만듭니다.
CREATE OR REPLACE TRIGGER salary_check_trigger
BEFORE INSERT OR UPDATE ON employees
FOR EACH ROW
BEGIN
IF :NEW.salary > 10000 THEN
RAISE_APPLICATION_ERROR(-20001, 'Salary cannot exceed 10000');
END IF;
END;
위 트리거는 급여가 10,000을 초과하면 오류를 발생시켜 급여가 조건에 맞지 않도록 막습니다.
4.2. 이력 관리
트리거는 데이터 변경 이력을 관리하는 데에도 유용합니다. 예를 들어, 직원의 정보가 수정될 때마다 이전 값을 기록하는 트리거를 작성할 수 있습니다.
CREATE OR REPLACE TRIGGER employee_update_trigger
AFTER UPDATE ON employees
FOR EACH ROW
BEGIN
INSERT INTO employee_history (employee_id, old_salary, new_salary, change_date)
VALUES (:OLD.employee_id, :OLD.salary, :NEW.salary, SYSDATE);
END;
이 트리거는 직원의 급여가 수정될 때마다 employee_history
테이블에 이전 급여와 새로운 급여를 기록합니다. :OLD
는 수정되기 전의 값을, :NEW
는 수정된 후의 값을 참조합니다.
5. 트리거 사용 시 주의사항
- 트리거가 무한 루프를 발생시키지 않도록 주의해야 합니다. 예를 들어, 트리거에서 또 다른 DML 작업을 수행하면 무한 반복이 발생할 수 있습니다.
- 트리거가 실행되는 시점에 따라 성능에 영향을 미칠 수 있으므로, 필요한 경우에만 사용해야 합니다.
- 트리거에서 복잡한 로직을 처리할 경우 성능이 저하될 수 있으므로 주의해서 작성해야 합니다.
6. 마무리
PL/SQL 트리거는 Oracle 데이터베이스에서 자동화된 작업을 처리하고 데이터 무결성을 유지하는 강력한 도구입니다. 트리거를 적절하게 활용하면 데이터베이스 관리가 쉬워지고, 실시간으로 필요한 작업을 자동으로 처리할 수 있습니다. 하지만 트리거의 사용에는 성능에 미치는 영향을 고려해야 하므로 적절하게 사용해야 합니다.
'ORACLE' 카테고리의 다른 글
오라클 자율운영 데이터베이스의 혁신과 활용 (0) | 2025.04.01 |
---|---|
Oracle에서 프로시저(Procedure)와 함수(Function) 만들기 (0) | 2025.03.31 |
ORACLE 스토어드 프로시저(Stored Procedure)와 함수(Function) 차이점 및 예제 (0) | 2025.03.29 |
ORACLE 효율적인 SQL 작성법과 실행 계획(Explain Plan) 분석 (0) | 2025.03.29 |
ORACLE 뷰(View)와 머티리얼라이즈드 뷰(MV)의 차이점 (0) | 2025.03.28 |