[오라클 SQL] 오라클 트리거(TRIGGER) 개념 및 사용 방법
안녕하세요.
오늘은 오라클 문법에서 트리거에 대해서 알아보려고 합니다.
먼저 트리거(TRIGGER)에 대한 개념부터 익혀봐야 겠죠?
트리거(TRIGGER)란 무엇인가?
- 트리거는 데이터베이스 이벤트에 반응하여 실행되는 프로그램 단위입니다. 트리거의 주요 사용 목적은 테이블 데이터의 무결성 보장, 데이터베이스 관리의 자동화 등이라고 할 수 있습니다.
그 중에서도 오늘은 DML 트리거에 대해서 알아보려고 합니다.
DML 트리거(TRIGGER)란?
- DML 트리거는 DML 문(INSERT, UPDATE, DELETE)이 테이블의 하나 이상의 데이터에 영향을 미칠 때에 자동으로 실행되는 트리거 입니다. 프로시저나 함수는 사용자가 직접 호출해야만 하지만, 트리거는 오라클에서 사용자에게 알려주지 않고 자동으로 호출하여 처리합니다.
DML 트리거(TRIGGER)의 특징
- 자동으로 실행되며 수동으로는 실행할 수 없습니다.
- 어떤 동작에서 실행되는지 지정해야 합니다.
- 작동이 일어난 트리거 대상 테이블에 대해서는 트리거 내용이 존재할 수 없습니다.
- BEFORE, AFTER 두 가지 트리거가 있습니다.
- 트랜잭션 일부로 처리됩니다. (COMMIT, ROLLBACK, SAVEPOINT 문장 포함 못함)
그럼 이제 DML 트리거 생성을 하는 방법에 대해서 알아 보도록 하겠습니다.
DML 트리거(TRIGGER) 생성 구문
CREATE [OR REPLACE] TRIGGER <트리거 이름>
{BEFORE|AFTER}<이벤트>ON<테이블>
[FOR EACH ROW]
[WHEN (<조건>)]
[DECLARE <변수선언>]
BEGIN
<실행코드>
[EXCEPTION <예외사항>]
END <트리거 이름>;
트리거의 생성 구문은 위와 같습니다.
그럼 이제 위의 내용들을 토대로 실제 트리거 구문을 만들어 보도록 하겠습니다.
제가 예제로 구현할 트리거는, STUDENT 테이블에 데이터가 INSERT 하게 되면, 해당 데이터를 STUDENT_HISTPRY 테이블에 그대로 저장하라는 트리거를 만들어 보려고 합니다.
여기 STUDENT 테이블이 있습니다.
다음은 STUDENT_HISTORY 테이블이 있습니다.
그럼 이제 STUDENT 테이블에 데이터를 INSTERT 하게 되면, 그대로 STUDENT_HISTORY 테이블에도 데이터가 저장되는 트리거를 작성해 보도록 하겠습니다.
예제 코드
1 2 3 4 5 6 7 8 9 | CREATE OR REPLACE TRIGGER TR_STUDENT_TEST BEFORE INSERT ON WIN.STUDENT FOR EACH ROW BEGIN IF INSERTING THEN INSERT INTO WIN.STUDENT_HISTORY(SCHOOL_NO, CLASS, NAME, AGE, GRADE, SCORE) VALUES (:NEW.SCHOOL_NO, :NEW.CLASS, :NEW.NAME, :NEW.AGE, :NEW.GRADE, :NEW.SCORE); END IF; END TR_STUDENT_TEST; |
위와 같이 트리거를 작성하였습니다.
그리고 이제는 STUDENT 테이블에 다음과 같은 데이터를 저장해 보도록 하겠습니다.
1 2 3 | INSERT INTO WIN.STUDENT (SCHOOL_NO, CLASS, NAME, AGE, GRADE, SCORE) VALUES ('2', '3', '양준일', '50', '1', '99')
|
그리고 나서 이제 실제로 STUDENT_HISTORY 테이블에도 같은 데이터가 잘 저장 되었는지 보도록 하겠습니다.
실행 결과
1 2 | SELECT * FROM WIN.STUDENT_HISTORY |
위와 같이 STUDENT_HISTORY 테이블에도 STUDENT 테이블에 저장된 데이터가 그대로 저장된 모습을 확인 하실 수 있습니다.
즉, DML 트리거가 정상적으로 수행 되었다는 뜻이겠죠?ㅎㅎ
이렇게 오늘은 간단히 오라클 트리거(TRIGGER)에 대한 개념 및 사용 방법에 대해서 알아 보았습니다.
감사합니다.^^