Oracle

[DB/오라클] TRIGGER 데이터 자동 변경/갱신 트리거

원코딩 2022. 7. 3. 23:47

 

 

오라클에서 지원하는 기능 중

 

 

테이블이 변경되었을 때 연관된 다른 테이블을

자동으로 업데이트 해주는 기능이 있다. 

 

 

데이터베이스는 테이블 끼리

관계 설정이 되어 있기 때문에 

서로 영향을 주는 경우가 많다. 

 

 

때문에 하나의 테이블이 변동 됐다면

관계가 맺어진 다른 테이블도 수정이 되어야 한다. 

이때 사용되는 기능이 바로 TRIGGER이다. 

 

 


 

 

1. 트리거 (TRIGGER)

트리거란 특정한 동작에 반응해 자동으로 필요한 동작이 실행되는 것이다.

예를 들어 입고 테이블에서 물품이 입고 되었다면 -> 재고 테이블의 재고 수량도 자동으로 늘어나게 한다. 

 

데이터베이스에서  INSERT, UPDATE, DELETE와 같은 이벤트 발생 시에 사용이 가능하다. ( SELECT 에서는 사용불가)

웹에서 이벤트가 발생하면 메뉴 클릭, 버튼 클릭, 이미지 클릭 했을 때 자바스크립트를 통해 작동되는 것과 같이

데이터베이스에서 이벤트가 발생되면 데이터가 변경되어야 하는데, 이때 사용되는 것이 TRIGGER이다.

 

TRIGGER은 하나의 테이블에서는 사용되지 않는다. 반드시 두개 이상의 테이블에서 활용되는 기능이다. 

즉 , 같은 테이블에서는 트리거를 생성 할 수 없다.

 

 

2. 트리거의 특징

* 자동으로 실행된다. 수동으로 실행할 수는 없다. 

* 오라클 자체에서 실행되기 때문에 자바에서는 코딩을 확일 할 수 없다. 때문에 분석하는데 까다롭다.

*  AutoCommit 이라 트랜잭션을 사용할 수 없다. (commit , rollback 사용 불가)

 

3. 트리거 형식

CREATE [OR REPLACE] TRIGGER tri_name

(BEFORE | AFTER) (INSERT | UPDATE | DELETE) ON table_name

[FOR EACH ROW]

[DECLARE] 

BEGIN (바인드 변수)

END;

/

 

▷ (INSERT | UPDATE | DELETE) : 해당 테이블에서 이벤트가 발생된다. 

   ex) 입고 테이블에 수량이 입고되었다면, 출고 테이블에 제품이 출고되었다면

 

▷ [FOR EACH ROW] : 실행될 문장과 동시에 각 행에 적용된다. (생략가능)

 

▷ [DECLARE]  : 변수 선언이 필요할 경우 작성한다. (생략가능)

 

▷  BEGIN : 구현부 (적용할 테이블에 대한 처리 문장)

  ex) 재고 테이블에 재고 증가, 재고 테이블의 재고 감소

 

▷  바인드 변수의 예시

  :NEW : 새로 입력되는 데이터를 가져올 때는 :NEW 형태로 가져와야 한다. INSERT 

  :OLD : 이미 입력된 데이터를 반영한다. :OLD 형태로 가져와야 한다. UPDATE,DELETE

  ex)

   INSERT INTO 입고 VALUES('A0001',5,5000)

   :NEW.수량(5)

   :NEW.상품번호('A0001')

   :NEW.금액(5000)

 

 

 

 


 

TRIGGER는 

조금 복잡하게 다가올 수 있어서

예제를 가지고 설명하는게 좋을 것 같다! 

 

다음엔 

트리거와 관련된 예제를 다루겠다.