Q&A

  • 트리거문에 대한 질문입니다. 부탁드립니다!
안녕하세요.. 트리거에 대한 질문입니다.

실행 에러는 나질 않는데.. 원하는 output이 나오질 않습니다.

제가 초보라서..트리거에 대한 이해가 부족합니다.

고수님들의 조언을 부탁드립니다. ^_^

오류 사항을 말씀드리겠습니다.

#ABC#(TABLE명)TABLE에 INSERT 할때 실행하는 트리거 문입니다.

조건

TABLE에 DATA가 하나도 없다구 가정하구 쓰겠습니다.

1. gubun = '0' 일때 1번과 2번을 실행합니다.



(#BBC#:TABLE)

필드명 PRODATE JEPUMCODE OUTQTY1

20010414 ABCD01(제품코드) 50 ->가

(#DDE#:TABLE)

필드명 PRODATE JEPUMCODE JaeGoQty

200104 ABCD01(제품코드) 50 ->나

입력이 되어집니다.



%오류는 다음과정에서 나온것 같습니다.%

2. gubun = '1'일때 입력하는 과정에서 같은일자(prodate),같은제품(JEPUMCODE)을

입력하면 문제가 생깁니다. 아래에 있는 3번 문이 인식을 하지 않습니다.

하지만 아래에 4번문은 문제없이 인식을 하구요.



예를들어 입력값 : 같은일자, 같은제품 , 수량이 30이면

다음 과 같이 나오질 않구.. 오류 예제처럼 나옵니다.

(#BBC#:TABLE)

필드명 PRODATE JEPUMCODE OUTQTY1 INTQTY2 OUTQTY3

20010414 ABCD01(제품코드) 50 ->가 30 30

(#DDE#:TABLE)

필드명 PRODATE JEPUMCODE JaeGoQty

200104 ABCD01(제품코드) 20 ->나



---> 오류 예제

===========================================================================================

(#BBC#:TABLE)

필드명 PRODATE JEPUMCODE OUTQTY1 INTQTY2 OUTQTY3

20010414 ABCD01(제품코드) 50 ->가

(#DDE#:TABLE)

필드명 PRODATE JEPUMCODE JaeGoQty

200104 ABCD01(제품코드) 20 ->나

============================================================================================

왜... 입력이 안되는 줄 모르겠습니다.

고수님들의 조언을 부탁드립니다...

create TRIGGER #ABC#_INSERT

AFTER insert ON #ABC# FOR EACH ROW

begin

if :NEW.GUBUN = '0' then

begin

update #BBC#

set OutQty1 = OutQty1 + :NEW.QTY

Where JEPUMCODE = :NEW.JEPUMCODE and PRODATE = :NEW.PRODATE;

if (SQL%ROWCOUNT)=0 then

begin

INSERT INTO #BBC# ( PROdate, JEPUMCODE, OutQty1 )

1번-> values (:NEW.PRODATE, :NEW.JEPUMCODE, :NEW.QTY);

end;

end if;



update #DDE#

set JaeGoQty = JaeGoQty + :NEW.QTY

Where JEPUMCODE = :NEW.JEPUMCODE and proDATE = substr(:NEW.prodate,1,6);

if (SQL%ROWCOUNT)=0 then

begin

INSERT INTO #DDE# ( prodate, JEPUMCODE, JAEGOQTY)

2번-> values (SubStr(:NEW.proDATE,1,6), :NEW.JEPUMCODE, :NEW.QTY);

end;

end if;

end;

end if;

if :NEW.GUBUN = '1' then

begin

update #BBC#

3번 -> set inQty2 = inQty2 + :NEW.QTY,

outQty3 = outQty3 + :NEW.QTY

Where JEPUMCODE = :NEW.JEPUMCODE and PRODATE = :NEW.PRODATE;

if (SQL%ROWCOUNT)=0 then

begin

INSERT INTO #BBC# ( PROdate, JEPUMCODE, inQty2, outQty3 )

values (:NEW.PRODATE, :NEW.JEPUMCODE, :NEW.QTY, :NEW.QTY );

end;

end if;



update #DDE#

4번 -> set JaeGoQty = JaeGoQty - :NEW.QTY

Where JEPUMCODE = :NEW.JEPUMCODE and proDATE = substr(:NEW.prodate,1,6);

if (SQL%ROWCOUNT)=0 then

begin

INSERT INTO #DDE# ( prodate, JEPUMCODE, JAEGOQTY)

values (SubStr(:NEW.proDATE,1,6), :NEW.JEPUMCODE, -:NEW.QTY);

end;

end if;

end;

end if;

end;



0  COMMENTS