트리거 어떻게 사용하나요?? 0 4 1,670

by 정종고 [PL/SQL] [2009.10.21 21:10:09]


안녕하세요!

T_ALMLOG TABLE에 초단위로 ROW가 쌓여서....

하루동안 20000만건 이상 생깁니다.

20000만건 이하로  ROW 갯수를 관리하고 싶어서....트리거 문장을 만들었는데..

어디가 잘못 되었는지 모르겠네요?

트리거를 어떻게 작성해야 하나요?

아래 문장을 보고 틀린 부분을 말해 주세요!

빠른 답변 부탁드립니다.

CREATE OR REPLACE TRIGGER BFSPD.TRG_ALMLOG_DELETE
AFTER INSERT ON T_ALMLOG
FOR EACH ROW
BEGIN
IF (SELECT COUNT(*) FROM T_ALMLOG) > 20000 THEN
  DELETE FROM T_ALMLOG WHERE ROWNUM < 800 ORDER BY ALM_DATE;
END IF;
END;

by 마농 [2009.10.22 08:30:58]
행단위 트리거가 아닌 문장단위 트리거로 바꾸세요.
FOR EACH ROW 를 빼시면 됩니다.
그리고 delete문장이 정확하게 잘 되는지부터 우선 실행해서 확인해 보세요.

by 정종고 [2009.10.22 13:25:12]
문장 단위 트리거 실행시!
INSERT 작업 후에 처리되지 않나요??
프로그램이 돌지 않고 정지한 상태입니다.
Delete문장만 처리되는 것 같네요?!
기존 데이터가 60만건 있는데... 2만건 될때까지 5천건씩 지워지는데...
다 지울때까지 INSERT 작업이 처리되지 않나요??

by 마농 [2009.10.22 13:45:04]
일련의 과정이 하나의 트랜젝션 입니다.
delete가 다 되어야 하나의 작업이 종료되는 것입니다.
60만건이요? 일단 트리거 동작시키기 전에 2만건으로 줄여 놓고 시작하셔야죠.

by 정종고 [2009.10.22 14:11:23]
네! 답변 감사합니다.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입