TG_CORP_BIZ_INFO (사업정보테이블) 이 update 되는 (사업진행상태가 예를들어 신청-> 신청완료) 이벤트가 생길때
트리거가 실행이 됩니다.
CREATE OR REPLACE TRIGGER OMIS.트리거이름
BEFORE UPDATE
ON TG_CORP_BIZ_INFO
FOR EACH ROW
DECLARE
n NUMBER;
sndYn NUMBER;
contPhone VARCHAR2(30); --담당자2 번호
contId VARCHAR2(30); --담당자2 사번
BEGIN
SELECT COUNT(*) into n
FROM TG_CMMN_DTL
WHERE GRP_CD = '43'
AND USE_YN = 'Y'
AND DTL_CD = :new.PROGRS_CD;
SELECT SMS_SND into sndYn
FROM TG_CNF;
SELECT CONT_ID into contId
FROM TG_CORP_BIZ_ITEM_INFO
WHERE CONT_NUMBER = :new.cont_number;
SELECT CONT_PERSONTEL into contPhone
FROM TG_CONC_CONT_INFO
WHERE CONT_ID = contId;
IF sndYn = 1 AND n > 0 AND :old.PROGRS_CD <> :new.PROGRS_CD THEN
INSERT INTO TG_SMS
(
CONT_NUMBER
, SND_SN
, PROGRS_CD
, MOBILE
, SND_CD
, REG_ID
, REG_DTTM
, UP_ID
, UP_DTTM
)
VALUES
(
:new.CONT_NUMBER
, (SELECT NVL(MAX(SND_SN), 0) + 1 FROM TG_SMS WHERE CONT_NUMBER = :new.CONT_NUMBER)
, :new.PROGRS_CD
, :new.corp_personmobile
, 'N'
, :new.UP_ID
, SYSDATE
, :new.UP_ID
, SYSDATE
);
INSERT INTO TG_SMS
(
CONT_NUMBER
, SND_SN
, PROGRS_CD
, MOBILE
, SND_CD
, REG_ID
, REG_DTTM
, UP_ID
, UP_DTTM
)
VALUES
(
:new.CONT_NUMBER
, (SELECT NVL(MAX(SND_SN), 0) + 1 FROM TG_SMS WHERE CONT_NUMBER = :new.CONT_NUMBER)
, :new.PROGRS_CD
, contPhone
, 'N'
, :new.UP_ID
, SYSDATE
, :new.UP_ID
, SYSDATE
);
END IF;
END;
위의 트리거는 사업진행상태가 바뀔때 담당자에게 문자메세지가 가게 하는 트리거 입니다.
트리거의 내용은 위에 쓰여진 내용입니다. INSERT 구문이 기존에는 한개만 있었는데 하나 더 해서
총 2개의 INSERT문이 실행되게 하고싶은데요. (담당자 1명이 더 생겨서 이 사람한테도 문자메세지가 갈수있도록)
화면단에서 사업진행상태 값을 변경시켜 트리거를 호출하면 INSERT문이 1개일떄는 에러가 안나는데
INSERT문이 1개 더 추가해서 2개가 될떄는 에러메세지가 나옵니다.
에러메세지는 ORA-01400: NULL을 ("OMIS"."TG_SMS"."MOBILE") 안에 삽입할 수 없습니다. 라고 나와요 ㅠㅠ
insert문의 4번째 컬럼 MOBILE이란 컬럼에 NULL이 들어가는 이유가 뭔지요..
Trigger를 거의 다루지않아 이번에 제대로 처음 다뤄보는데 너무 머리가 아픕니다 ;; ㅠ
도와주세요!!!
마지막으로 궁금한점이 있는데요. 하나의 테이블에 2개의 트리거를 적용시킬수 있을까요?