[오라클/ORACLE] PL/SQL - 트리거(TRIGGER) | 테이블 연결 후 자동화

PL/SQL

Procedural Language/Structured Query Language의 줄임말이다. 오라클의 SQL 전용 언어라고 보면 된다. 일반 SQL 문으로는 처리하기 어려운 문제들이 있는데, SQL에 변수, 제어, 입출력 등 기능을 추가해서 그런 문제들을 해결할 수 있게 돕는다.

 

PL/SQL는 크게 3가지다.

 

트리거(TRIGGER)

트리거는 참조되는 테이블 간 한쪽에 변경이 생기면 다른 한쪽의 값을 자동으로 바꿔주는 자동화 기능이다. 간단한 예로 판매 제품 테이블과 창고 재고 테이블이 있을 때 재고 수량을 늘리면 제품 테이블의 수량도 늘어나는 식이다.

 

사용문법

CREATE [OR REPLACE] TRIGGER 트리거명
{BEFORE / AFTER}
UPDATE / INSERT / DELETE ON 테이블명 -- 어떤 테이블에 어떤 이벤트가 발생
[FOR EACH ROW] -- 변경된 한줄 한줄에 대해 모두 처리
DECLARE
    변수선언
BEGIN
    실행할 PL/SQL 프로그램 코딩
END;
/

BEFORE을 사용하면 UPDATE / INSERT / DELETE문이 실행되기 전에 트리거가 실행되며 AFTER를 사용하면 UPDATE / INSERT / DELETE문이 실행된 후에 트리거가 실행된다.

 

FOR EACH ROW 옵션이 사용되면 변경된 한줄 한줄에 대해 모두 처리하는 행 트리거가 된다.

 

아래 예제는 Book이라는 테이블과 Book_log라는 테이블이 있는 상태에서 진행했다. Book 테이블은 파라미터로 bookid, bookname, publisher, price를 가지고 있다. Book_log 테이블 역시 동일한 파라미터를 가지고 있다.

CREATE OR REPLACE TRIGGER AfterInsertBook
  AFTER INSERT -- 트리거를 작동하게 하는 명령문은 INSERT 수행 후
  ON book -- 트리거를 부착할 테이블 book
  FOR EACH ROW -- 각 행마다 적용됨 
DECLARE
BEGIN -- 트리거 작동시 실행하는 코드
   INSERT INTO book_log
   VALUES(:new.bookid, :new.bookname, :new.publisher, :new.price);
END;
/

:new는 새롭게 입력된 값을 의미한다. 즉

INSERT INTO book_log
   VALUES(:new.bookid, :new.bookname, :new.publisher, :new.price);

라는 코드는 트리거가 작동하면(book테이블에 INSERT가 수행된 경우) book_log 테이블에도 새롭게 입력된 값을 각각의 파라미터에 넣어준다는 의미다.

INSERT INTO book values(23, '자바 프로그래밍', '한빛아카데미', 26000);

이제 이처럼 book 테이블에 INSERT를 실행하면 book_log 테이블에도 동일하게 값이 저장된다.

book_log 테이블

반응형

댓글

Designed by JB FACTORY