트리거도 프로시저 입니다. 근데 왜 굳이 트리거라고 할까요? 특정 이벤트가 발생할 때 자동으로 호출되는 프로시저를 트리거라고 부르기로 했습니다.
- 데이터 무결성 유지
- 감사 및 로그 기록
- 자동화된 비즈니스 로직 적용
이런 목적으로 트리거를 활용한다고 하네요.
정리하자면 프로시저는 복잡한 비즈니스 로직을 캡슐화 하여 재사용할 때 사용하고, 트리거는 주로 데이터 변경 이벤트에 반응하여 자동으로 처리해야 하는 작업을 의미합니다.
그럼 이벤트가 뭘까요? 주로 INSERT, UPDATE, DELETE와 같은 DML작업을 말합니다.
CREATE [OR REPLACE] TRIGGER trigger_name
{BEFORE | AFTER} {INSERT | UPDATE | DELETE}
ON table_name
[FOR EACH ROW]
DECLARE
-- 선언부 (선택적)
BEGIN
-- 트리거 본문
END;
트리거 기본 구문입니다.
전 사실 이렇게 보면 잘 모르겠어요... 뭐 생략가능하고 이게 올 수 있고 알겠는데.. 예제로 보는게 확실하달까
CREATE OR REPLACE TRIGGER before_insert_employee
BEFORE INSERT ON employees
FOR EACH ROW
BEGIN
IF :NEW.hire_date IS NULL THEN
:NEW.hire_date := SYSDATE;
END IF;
END;
이 트리거는 새로운 행이 삽입되기 전에 실행되는데 새로운 행의 hire_date가 NULL이면 SYSDATE(현재날짜)로 설정하는 트리거 입니다.
* FOR EACH ROW는 테이블의 각 행에 대해 트리거가 실행됩니다.
:NEW가 새로운 행을 참조하면 전의 행은 :OLD로 참조할 수 있습니다.
* 참고로 트리거는 자동 COMMIT 되기 때문에 트랜잭션 제어문을 사용할 수 없습니다.
* 트리거는 활성화/ 비활성화가 가능합니다.
ALTER TRIGGER trigger_name ENABLE; // 활성화
ALTER TRIGGER trigger_name DISABLE; // 비활성화
* IF ELSE 가능하고 IF로 시작했으면 END IF로 끝나야 합니다. 참일 떄만 실행됩니다.
'SQL' 카테고리의 다른 글
[Oracle] 프로시저 (0) | 2024.06.16 |
---|---|
[Oracle] 날짜 내장 함수 (1) | 2024.06.15 |
[Oracle] 숫자 내장 함수 (0) | 2024.06.15 |
[Oracle] 문자열 내장 함수 (0) | 2024.06.15 |
[Oracle] 기초 (MySQL과의 소소한 차이) (0) | 2024.06.08 |