트리거.. 0 2 1,245

by 지연 [2015.11.03 18:20:10]


초보 개발자입니다.

트리거를 처음 써 보는데요..?

A 테이블에서 트랜젹션이 일어 났을때..한시간 간격으로..

플래그 값을 구분해서..B 테이블에 insert는 i delete d update u

한 행씩 집어 넣오려고 합니다..

어떻게 트리거 구문을 써야 할지...

도와 주세요..

 

by 창조의날개 [2015.11.03 18:26:04]

보통 트리거는 해당 테이블에 데이터를 조작할때 마다  자동으로 실행이 됩니다.

시간을 두고 처리 하려면 따로 배치를 만들어야 합니다.

아래 트리거 관련 링크 참고해 보세요..

http://www.gurubee.net/lecture/1076

http://www.gurubee.net/lecture/2057


by 마농 [2015.11.03 21:18:43]

"트랜젹션이 일어 났을때..한시간 간격으로.." 라고 표현하셨는데요...
두가지 표현이 서로 배치되는 표현이네요.
트랜젹션이 일어 났을때.. 처리는 트리거로 하면 되고요
한시간 간격으로..처리는 프로시져생성해서 Job 또는 Secheduler 에 등록하면 됩니다.
I, U, D 구분을 두어야 하는 거라면?
1시간 간격이 아닌 실시간일 듯 하네요. 트리거가 맞을 듯.
아래는 트리거 샘플입니다. 업무로직에 맞게 수정하세요.
 

CREATE OR REPLACE TRIGGER tri_test
AFTER
INSERT OR UPDATE OR DELETE
ON a
FOR EACH ROW
BEGIN
    IF INSERTING THEN
        INSERT INTO b(gb, dt, pk, new_c1, new_c2)
        VALUES('I', sysdate, :NEW.pk, :NEW.c1, :NEW.c2)
        ;
    ELSIF UPDATING THEN
        INSERT INTO b(gb, dt, pk, new_c1, new_c2, old_c1, old_cd)
        VALUES('U', sysdate, :NEW.pk, :NEW.c1, :NEW.c2, :OLD.c1, :OLD.c2)
        ;
    ELSIF DELETING THEN
        INSERT INTO b(gb, dt, pk, old_c1, old_cd)
        VALUES('D', sysdate, :OLD.pk, :OLD.c1, :OLD.c2)
        ;
    END IF;
END;
/

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입