-
Oracle
의Trigger
는 특정 이벤트가 발생할 때 자동으로 실행되는PL/SQL
코드 블록입니다. -
데이터베이스 트리거는 데이터 무결성을 보장하거나 특정 작업을 자동화하는 데 사용됩니다.
-
Trigger
는INSERT
,UPDATE
,DELETE
작업 시 특정 테이블에서 발생할 수 있으며,BEFORE
,AFTER
, 또는INSTEAD OF
옵션으로 트리거의 실행 시점을 지정할 수 있습니다.
- 이벤트 : 트리거가 작동하는 시점 (
INSERT
,UPDATE
,DELETE
).
- 타이밍 : 이벤트가 발생하기 전(
BEFORE
)이나 후(AFTER
) 또는 대신(INSTEAD OF
) 실행됩니다.
- 레벨 : 트리거는 행 레벨(
Row-level
) 또는 문장 레벨(Statement-level
) 로 정의할 수 있습니다.- 행 레벨(
Row-level
): 각 행에 대해 실행됩니다. - 문장 레벨(
Statement-level
): 한 번만 실행됩니다.
- 행 레벨(
- 기본 예제 : 직원 테이블에서
salary
가 변경될 때 로그를 기록하는 트리거를 만듭니다.
-
먼저, 예제용으로 직원(
employees
) 테이블과 로그(salary_log
) 테이블을 생성합니다. -
sql
CREATE TABLE employees ( employee_id NUMBER PRIMARY KEY, name VARCHAR2(50), salary NUMBER ); CREATE TABLE salary_log ( log_id NUMBER PRIMARY KEY, employee_id NUMBER, old_salary NUMBER, new_salary NUMBER, change_date DATE );
-
employees
테이블의salary
가 변경될 때마다salary_log
테이블에 변경 기록을 추가하는 트리거를 작성합니다. -
sql
CREATE OR REPLACE TRIGGER trg_salary_update AFTER UPDATE OF salary ON employees FOR EACH ROW BEGIN INSERT INTO salary_log (log_id, employee_id, old_salary, new_salary, change_date) VALUES (salary_log_seq.NEXTVAL, :OLD.employee_id, :OLD.salary, :NEW.salary, SYSDATE); END;
-
AFTER UPDATE OF salary ON employees
:employees
테이블의salary
컬럼이 업데이트된 후에 트리거가 실행됩니다. -
FOR EACH ROW
: 각 행마다 실행되며, 행 레벨 트리거로 정의되었습니다. -
:OLD
와:NEW
::OLD.salary
는 업데이트 전의 급여를,:NEW.salary
는 업데이트 후의 급여를 나타냅니다.
-
salary_log_seq.NEXTVAL
은 로그 아이디(log_id
)를 자동으로 증가시키기 위해 시퀀스를 사용했다고 가정한 예제입니다.
- 위 트리거가 생성된 후, 직원의
salary
가 업데이트되면 자동으로 로그가 기록됩니다.
-
sql
UPDATE employees SET salary = salary * 1.1 WHERE employee_id = 1;
-
이 업데이트가 실행되면,
trg_salary_update
트리거가 작동하여salary_log
테이블에 변경 기록이 자동으로 추가됩니다.
-
데이터 무결성 을 유지하기 위해 사용됩니다. 예를 들어, 특정 조건을 위반하지 않도록 제한할 수 있습니다.
-
감사(
Audit
) 기능으로 특정 변경 사항을 기록할 수 있습니다. -
자동 계산 작업에서, 다른 테이블에 연관된 데이터를 자동으로 갱신할 때 유용합니다.
Oracle
의 트리거는 이벤트를 기준으로 다양한 자동 작업을 처리할 수 있는 강력한 도구입니다.
- 도움이 되셨으면 하단의 ❤️ 공감 버튼 부탁 드립니다. 감사합니다! 😄
- 일부 모바일 환경에서는 ❤️ 버튼이 보이지 않습니다.
'SQL' 카테고리의 다른 글
2정규형(2NF)의 개념 (0) | 2025.05.03 |
---|---|
1정규형(1NF)의 개념 (0) | 2025.05.03 |
Oracle Procedure 오라클 프로시저 프로시져 (0) | 2024.11.13 |
Oracle INDEX 오라클 인덱스 (0) | 2024.11.13 |
Oracle INNER JOIN, OUTER JOIN 오라클 이너 조인 아우터 조인 (0) | 2024.11.13 |