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 종료 */
반응형