DB/Oracle

TRIGGER SAMPLE

Edward. K 2008. 3. 28. 11:39
반응형

[TEST1] , [TEST2]  라는 테이블이 있고.
[TEST2]의 데이터가 변경시  [TEST1] 의 데이터를 변경하는 트리거를 생성해보자.

트리거 SAMPLE



0. Table 정보
    TEST1
        |_ ACT        :    number
        |_ SEQ        :    number
        |_ SDATE    :    date
        |_ EDATE    :    date
        |_ CDATE    :    date
        |_ T_ID        :    varchar

    TEST2
        |_ STAT        :   varchar
       |_ T_KEY      :   varchar   ( TEST1의 T_ID 와 동일 )


    
1. 목적
    TEST2 의 STAT가  END로 변경될 때
    TEST1 의
                ACT   : 30000  /     SEQ    :   3  인 경우
        ->     ACT   : 40000  /  SEQ    :   4
                SDATE = 등록시 입력한 일자
                EDATE =  등록시 입력한 일자

                ACT  :  50000   /      SEQ   :   5  인 경우
        ->     ACT  :  90000   /  SEQ   :   6
                CDATE  : 현재시간  


2. CREATE TRIGGER

    CREATE OR REPLACE TRIGGER STAT_UPDATE_TRIGGER   /*  트리거 선언 */
        AFTER  UPDATE ON TEST2   /* TEST2 업데이트 이후 */
        REFERENCING OLD AS OLD NEW AS NEW
        FOR EACH ROW
    DECLARE                    /*  변수 선언 */
        IS_ACT NUMBER(6);
        IS_SDATE DATE;
        IS_EDATE DATE;
    BEGIN
        IF(:NEW.STAT = 'END')     THEN   /* TEST2의 STAT 가 END로 변경되었을 경우  */

        /* IS_ACT에 TEST1 의 ACT값 세팅 */
        SELECT ACT INTO IS_ACT FROM TEST1 WHERE TASK_ID = :NEW.APPKEY; 
       
            IF( IS_ACT = 30000)     THEN     /*  TEST1 의 ACT값이   30000 인 경우 처리   START */

               /* IS_SDATE에 TEST1 의 SDATE 값 세팅 */
                SELECT SDATE INTO IS_SDATE FROM TEST1 WHERE TASK_ID = :NEW.APPKEY;
                /* IS_SDATE에 TEST1 의 EDATE 값 세팅 */
                SELECT EDATE INTO IS_EDATE FROM TEST1 WHERE TASK_ID = :NEW.APPKEY;
               
                /* TEST1 UPDATE 진행 */
                UPDATE TEST1
                SET ACT = 40000, SEQ=4, SDATE= IS_SDATE, EDATE= IS_EDATE
                WHERE T_ID = :NEW.T_KEY;

            END IF;                                  /*  TEST1 의 ACT값이   30000 인 경우 처리   END */
           
            IF( IS_ACT = 50000)     THEN
                UPDATE TEST1
                SET ACT = 90000, SEQ=6    , CDATE= SYSDATE
                WHERE T_ID = :NEW.T_KEY ;
            END IF;
           
        END IF;
       
    END;
/* Trigger 종료 */
반응형