특정 테이블(DATA_TBL)에 대해서 트리거를 걸고,
해당 이벤트를 기록하는 테이블(LOG_TBL) 이 존재한다고 할때, 테이블당 하나씩
트리거를 걸면 되므로 심플하게 되는데...

종종 이런로그를 쌓을때, 특정 자료들을 가공해서 써야 할때가 있습니다.

 게시판코드  게시판번호 제목  본문 
 BBS_001  0001  테스트제목1  본문입니다
 BBS_001  0002   테스트제목2~  본문2
 BBS_004  001  어때..이힝  정민철 메롱

다수의 게시판이 아니라,
하나의 게시판에 게시판 코드로 구분되어 만들어 지는 경우...

게시판 코드가 아니라...
BBS_001 , BBS_002, BBS_003 게시판은 ===> 멀티미디어게시판
BBS_004 , BBS_005, BBS_006 게시판은 ===> 텍스트게시판
나머지                                              ===> 기타게시판

뭐 묶음으로 로그를 남긴다고 해야하나??
아니면 분류를 새로 해서 로그를 남긴거나 아무튼 이런겁니다.




[샘플예제]
오라클기준으로 작성하였답니다

> KONAN_TEST (트리거가 걸릴 테이블)
 BBS_CODE  TITLE  BODY
     

> KONAN_TEST_LOG (KONAN_TEST의 로그가 쌓일곳)
 LOGID (로그고유번호 rowid로함)  TABLENAME (해당 테이블명)  EVENT (업데이트, 삽입, 삭제)
     

> kw_logtest

create or replace
TRIGGER kw_logtest
AFTER INSERT OR DELETE OR UPDATE  ON KONAN_TEST
FOR EACH ROW
DECLARE 
    tbl_name VARCHAR2(30) := '';      --테이블명
BEGIN
 
  -- 테이블코드 가져오기
  IF INSERTING THEN
    IF   (UPPER(:new.BBS_CODE) in ('BBS_01', 'BBS_02', 'BBS_03')) THEN
      tbl_name := '게시판1-3';
    ELSIF (UPPER(:new.BBS_CODE) in ('BBS_04', 'BBS_05', 'BBS_06')) THEN
      tbl_name := '게시판4-6'
    ELSE
      tbl_name := '기타게시판';
    END IF;
  ELSE
    IF   (UPPER(:old.BBS_CODE) in ('BBS_01', 'BBS_02', 'BBS_03')) THEN
      tbl_name := '멀티미디어게시판';
    ELSIF (UPPER(:old.BBS_CODE) in ('BBS_04', 'BBS_05', 'BBS_06')) THEN
      tbl_name := '게시판1-3';
    ELSE
      tbl_name := '게시판4-6'
    END IF;
  END IF;
  
 
  --실제로그쌓기
 IF INSERTING THEN
  INSERT INTO KONAN_TEST_LOG(LOGID,TABLENAME, event)
               VALUES(:new.rowid, tbl_name ,'I');
 ELSIF DELETING THEN
  INSERT INTO KONAN_TEST_LOG(LOGID,TABLENAME, event)
                  VALUES(:old.rowid, tbl_name, 'D');
 ELSIF UPDATING THEN 
  INSERT INTO KONAN_TEST_LOG(LOGID,TABLENAME, event)
                  VALUES(:old.rowid,tbl_name, 'U');
 END IF;
END;

[테스트결과]

 단계1.  삽입(Insert)  단계2.  수정(Update)  단계3. 삭제(Delete)
 
 
 

이런식으로 로그테이블에 해당 이벤트와 BBS_CODE가 아닌
재정의한 게시판 1-3 같은내용이 들어가는것!

+ Recent posts